【问题标题】:spring boot application.properties value from bean data来自bean数据的spring boot application.properties值
【发布时间】:2021-02-25 05:45:34
【问题描述】:

我正在使用弹簧靴。我在 application.yml 中定义了属性。

   spring:
     datasource:
       username: username
       password: password

用户名和密码值存储在外部,程序在启动期间获取。假设在启动期间获取它们的 bean 是 dbConfig
如何将值从 dbConfgig 注入到 application.yml?

我正在使用 spring-data-jpa 自动配置,它在启动时自动连接到数据库。我希望在 spring 连接到数据库之前将这些值加载到 application.yml。

【问题讨论】:

  • 你的意思是占位符吗? stackoverflow.com/questions/53273773/…
  • 是的,类似于此。但是我可以在占位符中调用函数吗?
  • 据我所知,无法在application.yaml中调用函数,为什么不在你的启动脚本中设置值呢?@warrior107

标签: java spring-boot


【解决方案1】:

无需在application.yml 中注入用户名/密码。您可以像这样以编程方式设置它们:

@Configuration
public class DataSourceConfig {
    
    @Bean
    public DataSource getDataSource() {
        DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
        dataSourceBuilder.driverClassName("org.h2.Driver");
        dataSourceBuilder.url("jdbc:h2:mem:test");
        
        // Take the values from external source, then set them
        dataSourceBuilder.username("username");
        dataSourceBuilder.password("password");
        return dataSourceBuilder.build();
    }
}

【讨论】:

  • 我正在使用 spring-boot-cloud-gcp-sql-autoconfigure。这会自动创建一个 Datasource bean。它从 application.yml 获取用户名和密码
  • @warrior107 没有spring-boot-cloud-gcp-sql-autoconfigure这样的东西。
【解决方案2】:

我认为首先,您必须创建一个线程来检测您的db Config file 的更改,然后您可能必须重新初始化您的 bean(数据源)以使您的更改生效。

见: how-to-reinitialize-a-spring-bean

【讨论】:

  • 重新加载 bean 是我可以使用的。但是问题是在启动过程中会建立数据库连接并且会失败。
【解决方案3】:

您也可以尝试使用 spring cloud 来存储属性。然后您可以在占位符的帮助下使用。

https://cloud.spring.io/spring-cloud-config/reference/html/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 2019-03-15
    • 2014-11-04
    • 2018-09-15
    • 1970-01-01
    • 2017-08-07
    • 2019-01-19
    相关资源
    最近更新 更多