java – Spring:特定于环境的配置

使用Spring我需要某种环境(dev | test | prod)特定属性.

我只有一个配置文件(myapp.properties),由于某些原因,我不能有多个配置文件(即使spring可以处理多个).

所以我需要添加带有前缀的属性

dev.db.user=foo
prod.db.user=foo

并告诉应用程序使用哪个前缀(环境)与-Denv-target之类的VM参数或类似的东西.

最佳答案
我为此目的使用了PropertyPlaceholderConfigurer的子主题:

public class EnvironmentPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {

    private static final String ENVIRONMENT_NAME = "targetEnvironment";

    private String environment;

    public EnvironmentPropertyPlaceholderConfigurer() {
        super();
        String env = resolveSystemProperty(ENVIRONMENT_NAME);
        if (StringUtils.isNotEmpty(env)) {
            environment = env;
        }
    }

    @Override
    protected String resolvePlaceholder(String placeholder, Properties props) {
        if (environment != null) {
            String value = props.getProperty(String.format("%s.%s", environment, placeholder));
            if (value != null) {
                return value;
            }
        }
        return super.resolvePlaceholder(placeholder, props);
    }

}

并在applicationContext.xml(或任何其他spring-configuration文件)中使用它:

<bean id="propertyPlaceholder"class="EnvironmentPropertyPlaceholderConfigurer">
    <property name="location" value="classpath:my.properties" />
</bean>

在my.properties中,您可以定义以下属性:

db.driverClassName=org.mariadb.jdbc.Driver
db.url=jdbc:mysql:///MyDB
db.username=user
db.password=secret
prod.db.username=prod-user
prod.db.password=verysecret
test.db.password=notsosecret

因此,您可以通过环境键(例如prod)为属性键添加前缀.

使用vm参数targetEnvironment,您可以选择您要使用的环境,例如: -DtargetEnvironment = PROD.

如果不存在特定于环境的属性,则选择默认属性(不带前缀). (您应该始终定义默认值.)

转载注明原文:java – Spring:特定于环境的配置 - 代码日志