使用空字符串作为属性的默认值,以便可以将其与其他字符串连接以形成值

时间:2019-06-12 14:55:41

标签: spring application.properties

在我的application.properties文件中,我具有以下由3个属性组成的属性:

eureka.instance.appname=${spring.application.name}${spring.profiles.active}${variant:}

我的意图是,当不初始化variant属性时,应通过串联variant属性的默认空字符串来形成eureka.instance.appname,以便该值将为$ {spring.application.name} $ {spring .profiles.active}。

但是如果我以上述指定的格式定义最终字符串,则格式不正确。我找不到分配空字符串作为变体默认值的方法。 当我使用$ {variant:''}时,当spring.application.name为SERVICE且spring.profiles.active为DEV且variant未分配值时,选择默认值',我得到一个eureka.instance.appname作为SERVICEDEV”。

到目前为止我尝试过的事情:

eureka.instance.appname=${spring.application.name}${spring.profiles.active}${variant:} 

不起作用,可能会崩溃。

eureka.instance.appname=${spring.application.name}${spring.profiles.active}${variant:''} 

赋予SERVICEDEV'',其中spring.application.name为SERVICE且spring.profiles.active为DEV且变量未分配值

1 个答案:

答案 0 :(得分:1)

eureka.instance.appname=${spring.application.name}${spring.profiles.active}${variant:}这对我有用。

其他方式::您可以让PropertySourcesPlaceholderConfigurer检查变体的值。如果为null,则可以将其更改为空字符串。

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer() {

            @Override
            public void setEnvironment(Environment environment) {
                if (environment instanceof ConfigurableEnvironment && environment.getProperty("variant") == null) {
                    ConfigurableEnvironment env = (ConfigurableEnvironment) environment;
                    env.getPropertySources().addLast(new MapPropertySource("Public key default", Collections.singletonMap("variant", "")));
                }

                super.setEnvironment(environment);
            }
        };
    }