简体   繁体   中英

spring boot application.properties value from bean data

I am working with spring boot. I have properties defined in application.yml.

   spring:
     datasource:
       username: username
       password: password

username and password values are stored externally which program fetches during startup. let's say the bean which fetches them during startup is dbConfig
How can I inject values from dbConfgig to application.yml?

I am using spring-data-jpa autoconfigure which automatically connects to database at startup. I want these values to be loaded to application.yml before spring connects to database.

I think that first, you must create a thread to detect the change at your db Config file and then may you must re-init your bean (data source) to make your change effect.

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

There is no need to inject the user/password in application.yml . You can set them programmatically like this:

@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();
    }
}

You may also try spring cloud to store properties. And you can then use with the help of placeholders.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM