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

Use empty string as default value for a property so that it can be concatenated with other strings to form a value

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

eureka.instance.appname=${spring.application.name}${spring.profiles.active}${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,变体没有赋值

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

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

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