Spring Boot参数化配置

问题描述

我正在使用一个Spring应用程序,该应用程序每年在application.properties文件中定义配置。基本上,这是一个复制粘贴工作,只是将粘贴的配置增加1。我们每年在多个类中都有类似的复制粘贴过程,并且每年都有bean定义。

因为需要访问由前几年的配置定义的内容,所以我认为提供当年的属性,然后定义具有某种参数化属性的所有bean会更简单。不过,我没有找到一种很好的方法来做到这一点。当前,我们有:

application.properties:

year2020.datasource.jdbcUrl=jdbc:postgresql://${built.url.2020}:5432/db_name
year2020.datasource.username=some_username
year2020.datasource.password=some_password
year2020.datasource.driverClassName=org.postgresql.Driver
year2020.datasource.validationQuery=SELECT 1

# And multiple similar configs for other resources and previous years

还有一些用于bean的类:

@Configuration
public class CopyPastedDataSource {

    @Bean(name = "year2020_datasource")
    @ConfigurationProperties(prefix = "year2020.datasource")
    public DataSource dataSource2020() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "year2019_datasource")
    @ConfigurationProperties(prefix = "year2019.datasource")
    public DataSource dataSource2020() {
        return DataSourceBuilder.create().build();
    }

    // And more beans for previous years
}

我当时想也许只是用占位符替换年份,然后在运行时根据需要将其替换为年份。有没有一种方法可以使这种方法更加惯用或可维护?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)