从HTML页面更改application.properties

时间:2018-09-01 11:50:29

标签: spring spring-mvc spring-boot

我正在使用Spring,并且application.properties中有我想从HTML页面更新的信息

Myapplication.properties

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

假设我们需要更改端口。

是否可以执行类似的操作?如果用户登录并进行了更改,结果是什么?

我也阅读了这篇帖子Update property in spring environment in java code是正确的解决方案。

我猜是否我说我们需要在更改某些信息后重建appplication.properties

2 个答案:

答案 0 :(得分:1)

  

是否可以做这样的事情?如果   用户已登录,我们进行了更改吗?

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

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

我建议您在系统启动时使用application.properties来初始化您的实例,如果发生更改,请使用以下内容: 充分利用Changing mail configuration in runtime和单例模式,您应该很可能达到目标:

@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或端口是否具有新值,请重新创建该实例;否则,如果实例已使用该值,则可以更改端口运行时间。 请注意,通过上面的代码,我试图为您提供有关此问题的一些见解,您可以根据自己的设计进行更改。

希望我能正确实现你的目的。

答案 1 :(得分:0)

首先,在更改配置后,您必须重新加载依赖于已更改变量的bean。

我建议您看看 Spring Cloud Config 项目。

它具有以下功能:

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

尽管不是您问题的直接答案(它没有用于配置的UI),但这是在 UI中搜索Spring Cloud Config 的充分理由。