MyBatis/Spring 配置數據源時,若在 XML 中直接硬編碼 <property name="password" value="123456"/> 而非用佔位符 ${jdbc.password},會導致屬性解析異常,表現為查詢時報錯、無法讀取外部屬性文件。
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="username" value="root"/>
<property name="password" value="123456"/> <!-- 硬編碼,非表達式 -->
<property name="url" value="jdbc:mysql://localhost:3306/db"/>
</bean>
<context:property-placeholder location="classpath:jdbc.properties"/>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="url" value="${jdbc.url}"/>
</bean>
jdbc.username=root
jdbc.password=123456
jdbc.url=jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf8
PropertyPlaceholderConfigurer 是否正確加載 properties 文件。jdbc.password vs jdbc.pwd)。Could not resolve placeholder 警告。System.getProperty("jdbc.password") 驗證屬性是否進入 JVM。外部化配置是十二要素應用核心,切忌硬編碼敏感信息。