如何以编程方式覆盖 Spring Boot application.properties?

新手上路,请多包涵

我有 jdbc 属性文件,我从外部配置 web 服务中获取在 spring boot 中为了设置 mysql props,将它们添加到 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

原文由 rayman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 331
1 个回答

您可以在响应 ApplicationEnvironmentPrepared 事件的生命周期侦听器中添加其他属性源。

类似于以下内容:

 public class DatabasePropertiesListener implements ApplicationListener<ApplicationEnvironmentPreparedEvent> {
  public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
    ConfigurableEnvironment environment = event.getEnvironment();
    Properties props = new Properties();
    props.put("spring.datasource.url", "<my value>");
    environment.getPropertySources().addFirst(new PropertiesPropertySource("myProps", props));
  }
}

然后在 src/main/resources/META-INF/spring.factories 中注册该类:

 org.springframework.context.ApplicationListener=my.package.DatabasePropertiesListener

这对我有用,但是,您此时可以做的事情有点有限,因为它在应用程序启动阶段相当早,您必须找到一种方法来获得您需要的值而不依赖于其他弹簧豆类等

原文由 Lukas Hinsch 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题