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

问题描述

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

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

我的意图是,当未初始化变体属性时,应通过连接变体属性的默认空字符串来形成 eureka.instance.appname,以便其值为 ${spring.application.name}${spring.profiles。主动}单独。

但如果我以上述指定格式定义最终字符串,则无法正确形成最终字符串。我找不到将空字符串分配为变量的默认值的方法。当我使用 ${variant:''} 时,spring.application.name 是 SERVICE 而 spring.profiles.active 是 DEV 并且没有为变量分配值,选择默认值 ',我得到一个 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 并且没有为变量分配值

标签: springapplication.properties

解决方案


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

推荐阅读