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

2022-09-01 00:40:39

我的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,但是有没有更简单的方法单独通过配置文件?@ConditionalSystem.setPropertyapplication.yml


答案 1

你可以试试。

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

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

}

答案 2

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

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

请注意,您可能希望尽早设置系统属性,可能在准备就绪后立即设置。为此,可以使用 侦听 .您的实现应通过 中的条目进行注册。EnvironmentApplicationListenerApplicationEnvironmentPreparedEventApplicationListenerspring.factories


推荐