Spring PropertyPlaceholderConfigurer實例

很多時候,大多數Spring開發人員只是把整個部署的詳細信息(數據庫的詳細信息,日誌文件的路徑)寫在XML bean配置文件如下:

<bean id="customerDAO" class="com.yiibai.customer.dao.impl.JdbcCustomerDAO">

    <property name="dataSource" ref="dataSource" />
</bean>

<bean id="customerSimpleDAO" class="com.yiibai.customer.dao.impl.SimpleJdbcCustomerDAO">

    <property name="dataSource" ref="dataSource" />
</bean>

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">

    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/yiibaijava" />
    <property name="username" value="root" />
    <property name="password" value="password" />
</bean>

但是,在企業環境中,部署的細節通常只可以由系統管理員或數據庫管理員來'觸碰',他們可能會拒絕直接訪問你的bean的配置文件,它們會要求部署配置一個單獨的文件,例如,一個簡單的性能(properties)文件,僅具有部署細節。

PropertyPlaceholderConfigurer示例

爲了解決這個問題,可以使用 PropertyPlaceholderConfigurer 類通過一個特殊的格式在外部部署細節到一個屬性(properties )文件,以及訪問bean的配置文件 – ${variable}.

創建一個屬性文件(database.properties),包括數據庫的詳細信息,把它放到你的項目類路徑。

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/yiibai_db
jdbc.username=root
jdbc.password=123456

在聲明bean配置文件和提供一個PropertyPlaceholderConfigurer映射到 剛纔創建的「database.properties」屬性文件。

    <property name="location">
        <value>database.properties</value>
    </property>
</bean>

完整的示例

<bean
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

    <property name="location">
        <value>database.properties</value>
    </property>
</bean>

<bean id="customerDAO" class="com.yiibai.customer.dao.impl.JdbcCustomerDAO">

    <property name="dataSource" ref="dataSource" />
</bean>

<bean id="customerSimpleDAO" 
            class="com.yiibai.customer.dao.impl.SimpleJdbcCustomerDAO">

    <property name="dataSource" ref="dataSource" />
</bean>

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">

    <property name="driverClassName" value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
</bean>

可替代用法

還可以使用 PropertyPlaceholderConfigurer 於某個常量,分享給所有其他bean。例如,定義在一個屬性文件中的日誌文件的位置,並通過  ${log.filepath} 訪問不同的 bean 配置文件的屬性值。