Spring Boot:使用数据库和application.properties进行配置

dev*_*eve 5 java spring spring-boot

我需要在数据库中保存Spring Boot应用程序的配置。

是否可以将数据库信息存储在中,application.properties并使用它们来连接数据库并从中检索所有其他属性?

所以我application.properties看起来像:

spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=mydb
spring.datasource.username=user
spring.datasource.password=123456
spring.jpa.database-platform=org.hibernate.dialect.SQLServer2012Dialect
Run Code Online (Sandbox Code Playgroud)

其他配置将从数据库中获取,如下所示:

@Configuration
@PropertySource(value = {"classpath:application.properties"})
public class ConfigurationPropertySource {

    private final ConfigurationRepository configurationRepository;

    @Autowired
    public ConfigurationPropertySource(ConfigurationRepository configurationRepository) {
        this.configurationRepository = configurationRepository;
    }

    public String getValue(String key) {
        ApplicationConfiguration configuration = configurationRepository.findOne(key);
        return configuration.getValue();
    }

}
Run Code Online (Sandbox Code Playgroud)

ApplicationConfiguration作为Entity

但是Spring Boot不会从数据库中获取配置。

kuh*_*yan 4

您可以尝试的一种可能的解决方案是使用ConfigurableEnvironment并重新加载和添加属性。

@Configuration   
public class ConfigurationPropertySource {

private ConfigurableEnvironment env;

private final ConfigurationRepository configurationRepository;

    @Autowired
    public ConfigurationPropertySource(ConfigurationRepository configurationRepository) {
        this.configurationRepository = configurationRepository;
    }

    @Autowired
    public void setConfigurableEnvironment(ConfigurableEnvironment env) {

        this.env = env;
   }

   @PostConstruct
   public void init() {
    MutablePropertySources propertySources = env.getPropertySources();
       Map myMap = new HashMap();
       //from configurationRepository get values and fill mapp
       propertySources.addFirst(new MapPropertySource("MY_MAP", myMap));
   }

}
Run Code Online (Sandbox Code Playgroud)