开发者社区 问答 正文

Spring配置文件中就没有条件判断标签吗

spring配置文件中就没有条件判断吗?

如下所示:

if(${redis.password} == null || ${redis.password} =="")
<constructor-arg name="password"><null/></constructor-arg>
else
<constructor-arg name="password" value="${redis.password}"></constructor-arg>

展开
收起
a123456678 2016-03-18 09:34:39 3107 分享 版权
1 条回答
写回答
取消 提交回答
  • 使用SpEL可以满足上述的需求,如下所示:

    <bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <array>
                <value>classpath:/settings.properties</value>
            </array>
        </property>
    </bean>
    
    <constructor-arg name="password" value="#{'${redis.password}'?:null}"></constructor-arg>
    <!--表示当redis.password不为空时,那么返回redis.password,否则返回null -->
    <!-- 或者可以如下表示那么含义就更清晰了-->
    <constructor-arg name="password" value="#{'${redis.password}'!=''?'${redis.password}':null}"></constructor-arg>
    setting.properties:
    
    redis.masterName=mymaster
    redis.password=
    redis.number=0

    注意:一定要给${redis.password}显式加上单引号,否则它就会被解析为bean。从而报错:
    Caused by: org.springframework.expression.spel.SpelEva

    2019-07-17 19:05:53
    赞同 展开评论