spring配置中的context:property-placeholder

spring配置中的<context:property-placeholder />

在spring整合redis的过程中,使用
<context:property-placeholder location="classpath:redis.properties" /> 读取配置文件,用以下代码配置redis

<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxTotal" value="${redis.pool.maxTotal}"/>
        <property name="maxIdle" value="${redis.pool.maxIdle}"/>
        <property name="maxWaitMillis" value="${redis.pool.maxWaitMillis}"/>
        <property name="testOnBorrow" value="${redis.pool.testOnBorrow}"/>
    </bean>

但是在项目启动后${redis.pool.maxTotal}等属性值读取不到。

网上资源表示:一个spring项目中只会加载一次property-placeholder,说明我的代码中有其他地方也在使用,同样读取属性文件的地方在配置dataSource的地方。但是dataSource并没有使用<context:property-placeholder />,而是

<bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
        <property name="location" value="classpath:jdbc.properties" />
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
    </bean>

原来这两种是等价的写法,既然等价那么加载jdbc.properties我也换成了<context:property-placeholder location="classpath:jdbc.properties" />
那么这样有两个property-placeholder了也复现了之前的问题,那么对于这两个我都必须使用,网上说可以使用ignore-unresolvable=true来解决,便尝试两个都改成

 <context:property-placeholder location="classpath:redis.properties" ignore-unresolvable="true"/>
  <context:property-placeholder location="classpath:jdbc.properties" ignore-unresolvable="true"/>

但这种情况下出现了jdbc属性读取不到现象

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"  init-method="init"
        destroy-method="close">  
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />

这里读取不到jdbc.driver,jdbc.url等,然后没办法之际将dataSource的配置改成最初的那种并使用ignore-unresolvable=true

 <bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
        <property name="location" value="classpath:jdbc.properties" />
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
    </bean>

这个时候问题便解决了。虽然问题解决了但是心里很疑惑,如果它们真的是等价的,为什么jdbc.properties和redis.properties同时使用<context:property-placeholder location="classpath:*.properties" ignore-unresolvable="true"/>加载时只有redis可以加载到属性,而jdbc使用bean,redis使用这种便可同时加载?我觉得它们之间必有什么不同的地方,希望有懂得朋友帮我解惑。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值