从HTML页面更改application.properties

问题描述 投票:0回答:2

我正在使用Spring并在我的application.properties中获取我想要从HTML页面更新的信息

my application.properties

...
spring.mail.host=smtp.gmail.com
spring.mail.port=587
...

假设我们需要更改端口。

是否可以做类似的事情,如果用户登录并且我们做了更改,结果是什么?

我也读过这篇文章Update property in spring environment in java code是正确的解决方案。

我想如果我说我们需要在更改一些信息后重建appplication.properties

spring spring-mvc spring-boot
2个回答
1
投票

是否可以做类似的事情,如果用户登录并且我们做了更改,结果是什么?

如果我理解正确,你想在运行时更改邮件端口?如果是这样 :

当然这是可能的,但仅更改属性文件中的值不会导致系统发生实际更改,您应该知道管理重新构建新邮件发件人实例是您的责任,您还应该考虑多线程,竞争条件等问题

我建议你在系统启动时使用application.properties初始化你的实例,如果发生变化,请使用类似的东西:采取Changing mail configuration in runtime和singleton模式的优点,你应该可以达到你的目标:

@Component
public class MailSender{

  @Value("${spring.mail.host}")
  public static String host;
  @Value("${spring.mail.port}")
  private static Integer port

  private static JavaMailSender instance;

  public static synchronized JavaMailSender getInstance(Integer port) {
     if (instance == null || port!= null) {
      MailSender.port = port!=null ? port: MailSender.port;
      JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
      mailSender.setHost(MailSender.host);
      mailSender.setPort(MailSender.port);
      return instance;
  }

}

上面的代码是单例模式的更改,我们在其中检查邮件实例是否为null或port是否有新值重新创建实例,否则如果实例已经使用了值,则可以通过这种方式更改端口运行时间。请注意,根据上面的代码,我试图让您对问题有所了解,您可以根据您的设计进行更改。

我希望我的目的正确。


0
投票

首先,在更改配置后,您必须根据更改的变量重新加载bean。

我建议你看一下Spring Cloud Config项目。

它具有以下功能:

  • 存储Git中的配置(和更改)
  • 可以在运行时更改配置属性,并强制订阅的应用程序自动重新加载其上下文(甚至是仅依赖的bean)

尽管它不能直接回答您的问题(它没有用于配置的UI),但它是一个很好的理由来搜索用于Spring Cloud Config的UI。

© www.soinside.com 2019 - 2024. All rights reserved.