Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 从HTML页面更改application.properties_Spring_Spring Mvc_Spring Boot - Fatal编程技术网

Spring 从HTML页面更改application.properties

Spring 从HTML页面更改application.properties,spring,spring-mvc,spring-boot,Spring,Spring Mvc,Spring Boot,我正在使用Spring,在我的应用程序.properties中有我想从HTML页面更新的信息 Myapplication.properties ... spring.mail.host=smtp.gmail.com spring.mail.port=587 ... 假设我们需要更改端口 是否可以这样做?如果用户登录并且我们进行了更改,结果会是什么 我也读过这篇文章,这是正确的解决方案 我想如果我说我们需要在更改一些信息后重建appapplication.properties 有可能这样做吗?如

我正在使用Spring,在我的
应用程序.properties
中有我想从HTML页面更新的信息

Myapplication.properties

...
spring.mail.host=smtp.gmail.com
spring.mail.port=587
...
假设我们需要更改端口

是否可以这样做?如果用户登录并且我们进行了更改,结果会是什么

我也读过这篇文章,这是正确的解决方案

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

有可能这样做吗?如果 用户已登录,我们是否进行了更改

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

当然,这是可能的,但是仅仅改变属性文件中的值不会导致系统的实际改变,您应该知道管理新邮件发送器实例的重建是您的责任,在这种情况下,您还应该考虑多线程、竞争条件等问题。 我建议您在系统启动中使用
application.properties
来初始化实例,如果发生更改,请使用以下内容: 在倡导和独生子女模式的同时,你很可能会达到你的目标:

@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;
  }
}

上面的代码是对singleton模式的修改,在这种模式中,我们检查邮件实例是否为null或端口是否有新的值。否则,如果实例已经有值,请使用该值,这样您就可以更改端口运行时。 请注意,通过上面的代码,我试图让您了解这个问题,您可以根据自己的设计进行更改


我希望我正确地理解了您的目的。

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

我建议您看看Spring云配置项目

它具有以下特点:

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

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

如果我理解,即使我使用
System.setProperty(“键”,“值”)
它也不会更改键,您是否查看了我在问题中添加的帖子。是的,但是application.properties不会在运行时更改,如果您需要一个变量来更改运行时,您可以使用系统属性,就像您提供的链接中一样。看一看你是完全正确的它不会改变邮件端口我会测试你的解决方案并给你反馈如何实现你的解决方案的任何想法(更多细节)。当然,我很乐意帮助您使您的解决方案更有价值,请添加此帖子链接。我从您的帖子中获得的信息和我从链接中获得的信息的组合帮助我解决了我的问题