Spring載入配置檔案propertoies中util:properties和context:property-placeholder區別

自由不過一種漂泊發表於2019-04-10

util:properties和context:property-placeholder標籤都可以用來獲取外部配置檔案,載入到Spring容器,通過Spring容器來管理獲取外部配置檔案中的內容  

前面

 準備jdbc.properties

 database.url=jdbc:mysql://localhost/smaple  
 database.driverClassName=com.mysql.jdbc.Driver  
 database.user=root  
 database.password=123  

一、util:properties 

全部屬性


它是以宣告bean方式來使用,建立了一個bean,下面使用的時候通過SpEL表示式#{}獲取bean的屬性。

<!-- util:properties形式載入 db.properties -->

<util:properties id="config" location="classpath:jdbc.properties" />
<!-- 配置Druid連線池 -->
<bean id="ds" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
 <!-- 基本屬性 driverClassName、url、user、password -->
    <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>


需要注意,這種方式需要在spring配置檔案頭部宣告

xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd"


二、context:property-placeholder 
它是將配置檔案載入至spring上下文中,然後通過${}取得值,常用於bean的屬性上

<!--context:property-placeholder形式載入 db.properties-->

<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置Druid連線池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <!-- 基本屬性 driverClassName、url、user、password -->
    <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>

如果有多個properties,可以使用萬用字元:<context:property-placeholder location="classpath*:/*.properties"/>

三、配置成bean的形式載入jdbc.properties

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <!--可以配置多個資原始檔 -->
        <list>
        <value>classpath:jdbc.properties</value>
        </list>
    </property>
</bean>

四.Spring中配置和讀取多個Properties檔案

1.資料庫配置檔案demo-db.properties:

database.url=jdbc:mysql://localhost/smaple  
database.driver=com.mysql.jdbc.Driver  
database.user=root  
database.password=123  

2.訊息服務配置檔案demo-mq.properties:

#congfig of ActiveMQ  
mq.java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory  
mq.java.naming.provider.url=failover:(tcp://localhost:61616?soTimeout=30000&connectionTimeout=30000)?jms.useAsyncSend=true&timeout=30000  
mq.java.naming.security.principal=  
mq.java.naming.security.credentials=  
jms.MailNotifyQueue.consumer=5  

3.遠端呼叫的配置檔案demo-remote.properties:

remote.ip=localhost  
remote.port=16800  
remote.serviceName=test  

4.載入多個Properties配置檔案

應用場景:Properties配置檔案不止一個,需要在系統啟動時同時載入多個Properties檔案。

配置方式:

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="  
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  
      
    <!-- 將多個配置檔案讀取到容器中,交給Spring管理 -->  
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
        <property name="locations">  
           <list>  
              <!-- 這裡支援多種定址方式:classpath和file -->  
              <value>classpath:/opt/demo/config/db.properties</value>  
              <!-- 推薦使用file的方式引入,這樣可以將配置和程式碼分離 -->  
              <value>file:/opt/demo/config/mq.properties</value>
              <value>file:/opt/demo/config/demo-remote.properties</value>                  
            </list>  
        </property>  
    </bean>  
      
    <!-- 使用MQ中的配置 -->  
    <bean id="MQJndiTemplate" class="org.springframework.jndi.JndiTemplate">  
        <property name="environment">  
            <props>  
                <prop key="java.naming.factory.initial">${mq.java.naming.factory.initial}</prop>  
                <prop key="java.naming.provider.url">${mq.java.naming.provider.url}</prop>  
                <prop key="java.naming.security.principal">${mq.java.naming.security.principal}</prop>  
                <prop key="java.naming.security.credentials">${mq.java.naming.security.credentials}</prop>  
                <prop key="userName">${mq.java.naming.security.principal}</prop>  
                <prop key="password">${mq.java.naming.security.credentials}</prop>  
            </props>  
        </property>  
    </bean>  
</beans>

我們也可以將配置中的List抽取出來:

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="  
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  
      
    <!-- 將多個配置檔案位置放到列表中 -->  
    <bean id="propertyResources" class="java.util.ArrayList">  
        <constructor-arg>  
            <list>  
              <!-- 這裡支援多種定址方式:classpath和file -->  
              <value>classpath:/opt/demo/config/demo-db.properties</value>  
              <!-- 推薦使用file的方式引入,這樣可以將配置和程式碼分離 -->  
              <value>file:/opt/demo/config/demo-mq.properties</value>  
              <value>file:/opt/demo/config/demo-remote.properties</value>  
            </list>  
        </constructor-arg>  
    </bean>  
      
    <!-- 將配置檔案讀取到容器中,交給Spring管理 -->  
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
        <property name="locations" ref="propertyResources" />  
    </bean>  
      
    <!-- 使用MQ中的配置 -->  
    <bean id="MQJndiTemplate" class="org.springframework.jndi.JndiTemplate">  
        <property name="environment">  
            <props>  
                <prop key="java.naming.factory.initial">${mq.java.naming.factory.initial}</prop>  
                <prop key="java.naming.provider.url">${mq.java.naming.provider.url}</prop>  
                <prop key="java.naming.security.principal">${mq.java.naming.security.principal}</prop>  
                <prop key="java.naming.security.credentials">${mq.java.naming.security.credentials}</prop>  
                <prop key="userName">${mq.java.naming.security.principal}</prop>  
                <prop key="password">${mq.java.naming.security.credentials}</prop>  
            </props>  
        </property>  
    </bean>  
</beans>  

 

推薦部落格:Spring載入Properties配置檔案的四種方式

 

 

相關文章