Can I define System Properties within Spring Boot configuration files? Can I define System Properties within Spring Boot configuration files? java java

Can I define System Properties within Spring Boot configuration files?


You may try.

@Profile("production")@Componentpublic class ProductionPropertySetter {   @PostConstruct   public void setProperty() {      System.setProperty("http.maxConnections", "15");   }}


I suppose I could create a bean that's @Conditional on the "production" profile that programmatically callsSystem.setProperty based on my application.yml-defined property, but is there a simpler way through configuration files alone?

I think that's your best bet here. Spring Boot does that itself in its LoggingSystem where various logging.* properties are mapped to System properties.

Note that you'll probably want to set the system properties as early as possible, probably as soon as the Environment is prepared. To do so, you can use an ApplicationListener that listens for the ApplicationEnvironmentPreparedEvent. Your ApplicationListener implementation should be registered via an entry in spring.factories.


You can inject the environment into the constructor of the class that specifies the beans. This allows you to write application properties to the system properties before the beans are being created.

@Configurationpublic class ApplicationBeans {   @Autowired   public ApplicationBeans(Environment environment) {      // set system properties before the beans are being created.      String property = "com.application.property";      System.getProperties().setProperty(property, environment.getProperty(property));   }   /**    * Bean that depends on the system properties    */   @Bean   public SomeBean someBean() {      return new SomeBean();   }}