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

Spring 載入 Properties 配置文件的三種方式詳解

     編輯:Java 綜合教學

Spring 載入 Properties 配置文件的三種方式詳解

實際開發中,數據庫連接參數、第三方服務配置等不宜硬編碼,通常放在 .properties 文件中。Spring 提供了三種主要方式載入並使用這些配置。

方式一:<context:property-placeholder>(最常用)

<!-- 載入單個文件 -->
<context:property-placeholder location="classpath:db.properties"/>

<!-- 支持通配符批量載入 -->
<context:property-placeholder location="classpath:db*.properties"/>

db.properties 示例:

db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://192.168.8.32:3306/test
db.username=root
db.passwd=root

在 XML 中使用(${...} 語法):

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${db.driver}"/>
    <property name="url" value="${db.url}"/>
    <property name="username" value="${db.username}"/>
    <property name="password" value="${db.passwd}"/>
</bean>

在 Java 代碼中注入(@Value):

@Component
public class DbConfig {
    @Value("${db.driver}") private String driver;
    @Value("${db.url}") private String url;
    @Value("${db.username}") private String username;
    @Value("${db.passwd}") private String password;
    // getter/setter...
}

方式二:PropertyPlaceholderConfigurer(支持多文件显式配置)

<bean id="appProperty" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <array>
            <value>classpath:quartz.properties</value>
            <value>classpath:db.properties</value>
        </array>
    </property>
</bean>

使用方式與方式一完全一致(${...} 和 @Value("${...}"))。

注意:<context:property-placeholder> 和 PropertyPlaceholderConfigurer 兩種方式在 Spring 容器中只能二擇一生效。容器採用反射掃描,若已存在 PropertyPlaceholderConfigurer 實例,則不會再創建第二個。建議統一使用方式一。

方式三:PropertiesFactoryBean(#{...} SpEL 語法)

<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="locations">
        <list>
            <value>classpath:quartz.properties</value>
            <value>classpath:db.properties</value>
        </list>
    </property>
</bean>

XML 中使用:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${db.driver}"/>  <!-- 方式一語法 -->
    <property name="url" value="#{configProperties['db.url']}"/>  <!-- SpEL 語法 -->
    <property name="username" value="#{configProperties['db.username']}"/>
    <property name="password" value="123456"/>
</bean>

Java 代碼中注入:

@Value("#{configProperties['db.username']}")
private String dbUsername;

底層原理:PropertiesLoaderSupport

查看 UML 類圖可見,location/locations 屬性定義在共同父類 PropertiesLoaderSupport(抽象類)中,三種方式本質上都是通過該父類統一載入處理。

最佳實踐建議

  1. 優先使用 <context:property-placeholder>:配置簡潔、支持通配符、社區最主流
  2. 多環境隔離:配合 spring.profiles.active 載入 db-dev.properties、db-prod.properties
  3. 敏感信息加密:密碼等敏感配置建議加密存儲,配合自定義 PropertySourcesPlaceholderConfigurer 解密
  4. 避免混用語法:團隊內統一約定使用 ${...} 或 #{...},減少認知負荷
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved