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

Spring 使用空字符串作为属性的默认值,以便可以将其与其他字符串连接以形成值,spring,application.properties,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.profi

在我的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,variant没有分配值

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

其他方法:您可以让
属性资源占位符配置器检查变量的值。如果为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);
            }
        };
    }

是的,提到默认空字符串值的第一种方法对我也适用。我是在发布这个问题后才意识到这一点的。我可能把我的devops链搞砸了。