我可以在 Spring Boot 配置文件中定义系统属性吗?

新手上路,请多包涵

我的 Spring Boot 应用程序有一个 application.yml 配置文件,它定义了两个配置文件(如 文档 中所述)。

启用生产配置文件后,我想将 http.maxConnections 系统属性设置为自定义值,例如

spring:
    profiles:
        active: dev
---
spring:
    profiles: dev
---
spring:
    profiles: production
http:
    maxConnections: 15

但这实际上并没有设置系统级属性;它似乎只是创建一个应用程序级属性。在比较启动时,我已经通过 http://locahost:8080/env 和 JMX 控制台验证了这一点

java -jar -Dspring.profiles.active=production myapp.jar

相对

java -Dhttp.maxConnections=15 myapp.jar

我想我可以创建一个 bean,它是 @Conditional 在以编程方式调用 System.setProperty 的“生产”配置文件上 --- 基于我的 application.yml 单独通过配置文件的方式?

原文由 bdkosher 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 786
2 个回答

我想我可以在“生产”配置文件上创建一个 @Conditional 的 bean,它基于我的 application.yml 定义的属性以编程方式调用 System.setProperty,但是是否有更简单的方法单独通过配置文件?

我认为这是你最好的选择。 Spring Boot 自己在其 LoggingSystem 中执行此操作,其中各种 logging.* 属性映射到系统属性。

请注意,您可能希望尽早设置系统属性,可能是在 Environment 准备好之后。为此,您可以使用 ApplicationListener 来侦听 ApplicationEnvironmentPreparedEvent 。您的 ApplicationListener 实施应通过 spring.factories 中的条目注册。

原文由 Andy Wilkinson 发布,翻译遵循 CC BY-SA 3.0 许可协议

你可以试试。

 @Profile("production")
@Component
public class ProductionPropertySetter {

   @PostConstruct
   public void setProperty() {
      System.setProperty("http.maxConnections", "15");
   }

}

原文由 TheKojuEffect 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题