Spring-PlaceHolder,找不到变量替换

问题描述: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清洗后再放进来,问题还会出现,因此必然和编码转换相关。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容