我的Sping Boot 应用程序只有一个application.yml
配置文件,它定义了两个配置文件(如文档中所述)。
当启用生产配置文件时,我想将http.maxConnections
系统属性设置为自定义值,例如。
spring:
profiles:
active: dev
---
spring:
profiles: dev
---
spring:
profiles: production
http:
maxConnections: 15
字符串
但这实际上并没有设置系统级属性;它似乎只是创建了一个应用程序级属性。
java -jar -Dspring.profiles.active=production myapp.jar
型
与
java -Dhttp.maxConnections=15 myapp.jar
型
我想我可以在“生产”配置文件上创建一个@Conditional
bean,它基于我的application.yml
定义的属性以编程方式调用System.setProperty
,但是是否有一种更简单的方法只通过配置文件?
5条答案
按热度按时间8nuwlpux1#
你可以试试
字符串
chy5wohz2#
我想我可以在“生产”配置文件上创建一个@Conditional的bean,它基于我的application. yml定义的属性以编程方式调用System.setProperty,但是是否有一种更简单的方法只通过配置文件?
我认为这是最好的选择。Sping Boot 在其
LoggingSystem
中自己完成了这一点,其中各种logging.*
属性Map到System属性。请注意,您可能希望尽可能早地设置系统属性,可能是在
Environment
准备好之后。为此,您可以使用ApplicationListener
侦听ApplicationEnvironmentPreparedEvent
。您的ApplicationListener
实现应该通过spring.factories
中的条目注册。qzwqbdag3#
您可以将环境注入到指定Bean的类的构造函数中。这允许您在创建Bean之前将应用程序属性写入系统属性。
字符串
gab6jxml4#
我遇到了类似的挑战,并努力寻找一种可靠的方法来使用Spring配置文件外部化系统属性。虽然命令行参数是一种选择,但我更倾向于避免这种方法,以便将所有配置设置整合在一个地方。
您可以在项目中使用以下类:
字符串
在application.properties中:
型
该组件从Spring Context中读取前缀为“system.properties“的所有属性,并将其放入System#setProperty中。当然,您可以根据需要更改前缀。
beq87vna5#
您还可以使用org.springframework.beans.factory.config中的PropertyPlaceholderConfigurer来获取属性文件的句柄