美文网首页
Spring-PlaceHolder,找不到变量替换

Spring-PlaceHolder,找不到变量替换

作者: Ylm007 | 来源:发表于2017-11-25 11:30 被阅读0次

    问题描述:Spring中xml配置并使用了properties文件,项目启动时,提示找不到变量。

    引入properties的配置如下

    <context:property-placeholder location="classpath:important.properties,classpath:extend.properties"/>
    

    properties文件如下

    order.jdbc0.url=jdbc:mysql://45140.mysql.db.com:3358/order?characterEncoding=UTF8
    order.jdbc1.url=jdbc:mysql://45140.mysql.db.com:3358/order?characterEncoding=UTF8
    order.jdbc2.url=jdbc:mysql://45140.mysql.db.com:3358/order?characterEncoding=UTF8
    

    变量如下:

    <bean id="dataSource0" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <property name="url" value="${order.jdbc0.url}" />
        <property name="username" value="${order.jdbc0.username}" />
        <property name="password" value="${order.jdbc0.password}" />
        <property name="filters" value="config" />
        <property name="maxWait" value="15000" />
        <property name="timeBetweenEvictionRunsMillis" value="60000" />
        <property name="minEvictableIdleTimeMillis" value="180000" />
        <property name="validationQuery" value="SELECT 'x'" />
        <property name="testWhileIdle" value="true" />
        <property name="testOnBorrow" value="false" />
        <property name="testOnReturn" value="false" />
        <property name="poolPreparedStatements" value="true" />
        <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
    </bean>
    

    追踪:确认变量的k和别名一一对应,无重复引用,placeHolder确实加载了properties文件,变量所在bean的初始化在placeHolder之后,和Bean启动顺序无关。

    Debug了placeHolder的变量栈,发现变量池中变量order.jdbc0.url前面有一个制表符,导致识别不了这个变量。properties文件使用GBK编码,且此变量位于该文件的第一行第一个字符起,在变量前面加上一个回车后问题解决;又,把原文件使用txt清洗后再放进来,问题还会出现,因此必然和编码转换相关。

    相关文章

      网友评论

          本文标题:Spring-PlaceHolder,找不到变量替换

          本文链接:https://www.haomeiwen.com/subject/bvzqbxtx.html