首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring 基礎:使用 PropertyPlaceholderConfigurer 載入外部屬性文件

     編輯:Java 綜合教學

場景痛點

Bean 配置中硬編碼文件路徑、數據源信息等部署細節,導致環境遷移需修改代碼。Spring 提供 PropertyPlaceholderConfigurer 將配置外部化到 .properties 文件,並在 XML 中用 ${var} 佔位符引用。

核心機制

  1. 後置處理器:PropertyPlaceholderConfigurer 實現 BeanFactoryPostProcessor,在 Bean 實例化前替換佔位符。
  2. 屬性文件:Key-Value 格式,支援 ${key} 互相引用。
  3. 命名空間簡化:<context:property-placeholder location="..."/> 自動注冊處理器。

完整示例

1. 目錄結構

項目目錄結構

2. db.properties

abc=123456
cde=${abc}

3. spring-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans"
       xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="https://www.springframework.org/schema/context"
       xmlns:p="https://www.springframework.org/schema/p"
       xsi:schemaLocation="https://www.springframework.org/schema/beans
           https://www.springframework.org/schema/beans/spring-beans.xsd
           https://www.springframework.org/schema/context
           https://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 載入屬性文件,自動註冊 PropertyPlaceholderConfigurer -->
    <context:property-placeholder location="db.properties"/>

    <!-- 使用 ${...} 引用屬性 -->
    <bean class="com.nucsoft.spring.bean.Employee" id="employee"
          p:empName="${abc}" p:age="${cde}" scope="prototype"/>
</beans>

4. 測試代碼

@Test
public void test01() {
    Employee employee = ctx.getBean(Employee.class);
    System.out.println(employee);
}

5. 控制台輸出

Employee{empName='123456', age=123456}

進階用法

  • 多文件載入:location="classpath:db.properties,classpath:redis.properties"
  • 系統屬性覆蓋:systemPropertiesModeName="SYSTEM_PROPERTIES_MODE_OVERRIDE",JVM -D 參數優先級更高。
  • 忽略不存在文件:ignore-unresolvable="true" 防止啟動失敗。
  • 自定義前綴/後綴:placeholderPrefix="%{" placeholderSuffix="}" 避免衝突。

Spring Boot 時代的替代方案

Spring Boot 推薦使用 @ConfigurationProperties + application.yml,提供類型安全綁定、鬆綁驗證、Profile 多環境隔離,功能更強大。但理解 PropertyPlaceholderConfigurer 有助於維護老專案及掌握 Spring 核心容器擴展點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved