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

bdk*_*her 24 java system-properties spring-boot

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

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

spring:
    profiles:
        active: dev
---
spring:
    profiles: dev
---
spring:
    profiles: production
http:
    maxConnections: 15
Run Code Online (Sandbox Code Playgroud)

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

java -jar -Dspring.profiles.active=production myapp.jar
Run Code Online (Sandbox Code Playgroud)

java -Dhttp.maxConnections=15 myapp.jar
Run Code Online (Sandbox Code Playgroud)

我想我可以@Conditional在"生产"配置文件中创建一个bean,它System.setProperty根据我的application.yml-defined属性以编程方式调用,但是单独通过配置文件有更简单的方法吗?

The*_*ect 9

你可以试试.

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

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

}
Run Code Online (Sandbox Code Playgroud)

  • @Palcente 是的,这是有道理的。我相信您可以将属性放入“application-development.yml”中,该属性将在“生产”配置文件中使用。 (2认同)

And*_*son 6

我想我可以在“生产”概要文件上创建一个@Conditional的Bean,该Bean根据我的application.yml定义的属性以编程方式调用System.setProperty,但是仅通过配置文件有没有更简单的方法?

我认为这是您最好的选择。Spring Boot在将LoggingSystem各种logging.*属性映射到系统属性的过程中自行完成此操作。

请注意,您可能希望尽早设置系统属性Environment。为此,您可以使用ApplicationListener监听ApplicationEnvironmentPreparedEvent。您的ApplicationListener实现应通过中的条目进行注册spring.factories