我有来自外部配置web-service的jdbc属性文件在spring boot中为了设置mysql道具,将它们添加到application.properties很容易:
spring.datasource.url=jdbc:mysql://localhost/mydb
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
我怎么能在我的应用程序中重写那些程序?
Spring-batch道具同样如此:
database.driver=com.mysql.jdbc.Driver
database.url=jdbc:mysql://localhost/mydv
database.username=root
database.password=root
7 回答
您可以在生命周期侦听器中添加其他属性源,以响应ApplicationEnvironmentPrepared事件 .
有点像:
然后在src / main / resources / META-INF / spring.factories中注册该类:
这对我来说很有用,但是,你现在可以做些什么,因为它在应用程序启动阶段相当早,你必须找到一种方法来获得你需要的值而不依赖于其他 spring beans 子等
只是为这个线程提供另一个选项以供参考,因为当我开始寻找我的要求的答案时,这在搜索列表中很高,但是没有涵盖我的用例 .
我希望在启动时以编程方式设置spring boot属性,但不需要使用spring支持的不同XML / Config文件 .
最简单的方法是在定义SpringApplication时设置属性 . 下面的基本示例将tomcat端口设置为9999 .
由于 spring 启动1.3 EnvironmentPostProcessor可用于此目的 . 创建它的子类并在META-INF / spring.factories中注册一个很好的例子在这里:
https://github.com/spring-cloud/spring-cloud-sleuth/blob/48f3f9783f277a795d0210399f0ea09b7f1a4e71/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/autoconfig/TraceEnvironmentPostProcessor.java
在配置中使用此方法,您可以设置默认属性 .
从Spring Boot 2.0.X开始,您可以使用自定义ApplicationContextInitializer和ContextConfiguration批注的组合动态覆盖单个属性(例如,在单元测试中) .
在META-INF文件夹下,准确创建此文件夹和文件:spring> batch> override> data-source-context.xml,并在xml文件中确保覆盖您想要的参数:
或者在xml文件中使用这样的jndi来访问外部配置文件,如catalina.properties
如果必须,可以通过编程方式覆盖application.properties .