【轉】spring管理屬性配置文件properties——使用PropertiesFactoryBean|spring管理屬性配置文件properties——使用PropertyPlaceholderConfigurer


 spring管理屬性配置文件properties——使用PropertiesFactoryBean

 

對於屬性配置,一般采用的是鍵值對的形式,如:key=value

屬性配置文件一般使用的是XXX.properties,當然有時候為了避免eclipse把properties文件轉碼,放到服務器上認不出中文,可以采用XXX.conf的形式管理屬性配置。
spring對於屬性文件有自己的管理方式,通過spring的管理,可以直接使用@Value的方式直接得到屬性值。
先使用org.springframework.beans.factory.config.PropertiesFactoryBean對屬性配置文件進行管理。

 

1.新建一個Java project,命名spring_test;

2.導入jar包:

aopalliance-1.0.jar
commons-logging-1.1.1.jar
org.springframework.test-3.1.0.RELEASE.jar
spring-aop-3.1.1.RELEASE.jar
spring-asm-3.1.1.RELEASE.jar
spring-beans-3.1.1.RELEASE.jar
spring-context-3.1.1.RELEASE.jar
spring-context-support-3.1.1.RELEASE.jar
spring-core-3.1.1.RELEASE.jar
spring-expression-3.1.1.RELEASE.jar

3.在src下新建一個config.propertites:

author_name=lee

4.新建一個文件夾config;

5.新建一個app.conf:

project_info=項目

6.新建一個spring配置文件applicationContext.xml:

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

    <context:annotation-config />
    <context:component-scan base-package="com.*"></context:component-scan>

    <!-- 使用注解注入properties中的值 -->
    <bean id="setting"
        class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="locations">
            <list>
                <value>classpath:*.properties</value>
                <value>file:config/*.conf</value>
            </list>
        </property>
        <!-- 設置編碼格式 -->
        <property name="fileEncoding" value="UTF-8"></property>
    </bean>
</beans>

7.新建一個獲取屬性配置文件屬性的類ConfigProperty.java:

package com.lee.property.test;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * config.properties文件映射類
 * 
 *
 */
@Component("configProperty")
public class ConfigProperty {

    /** 作者名字 */
    @Value("#{setting[author_name]}")
    private String authorName;
    /** 項目信息 */
    @Value("#{setting[project_info]}")
    private String projectInfo;

    public String getAuthorName() {
        return authorName;
    }

    public void setAuthorName(String authorName) {
        this.authorName = authorName;
    }

    public String getProjectInfo() {
        return projectInfo;
    }

    public void setProjectInfo(String projectInfo) {
        this.projectInfo = projectInfo;
    }

}

8.新建測試類:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
public class ConfigPropertyTest {
 
    @Resource(name = "configProperty")
    private ConfigProperty configProperty;
     
    /**
     * 測試Spring注解獲取properties文件的值
     */
    @Test
    public void test() {
        System.out.println(configProperty.getAuthorName());
        System.out.println(configProperty.getProjectInfo());
    }
 
}

總結:

1.使用org.springframework.beans.factory.config.PropertiesFactoryBean獲取屬性的方式是:

@Value("${beanid['properties_key']}")

2.使用

<!-- 設置編碼格式 -->
<property name="fileEncoding" value="UTF-8"></property>

主要為了解決屬性文件中value為中文時亂碼的問題。

 

spring管理屬性配置文件properties——使用PropertyPlaceholderConfigurer

上一篇文章spring管理屬性配置文件properties——使用PropertiesFactoryBean中提到使用org.springframework.beans.factory.config.PropertiesFactoryBean管理屬性文件,在學習過程中發現通過org.springframework.beans.factory.config.PropertyPlaceholderConfigurer也可以管理配置文件。

1.在上一個項目(spring_test)的基礎上新建spring配置文件applicationContext2.xml:

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

    <context:annotation-config />
    <context:component-scan base-package="com.*"></context:component-scan>
    <!-- <context:property-placeholder location="file:config/*.conf" ignore-unresolvable="true"/>
    <context:property-placeholder location="classpath:*.properties" ignore-unresolvable="true"/> -->

    <!-- 使用注解注入properties中的值 -->
    <bean id="setting"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="ignoreUnresolvablePlaceholders" value="true" />   
        <property name="locations">
            <list>
                <value>classpath:*.properties</value>
                <value>file:config/*.conf</value>
            </list>
        </property>
        <!-- 設置編碼格式 -->
        <property name="fileEncoding" value="UTF-8"></property>
    </bean>
</beans>

2.修改ConfigProperty.java:

@Component("configProperty")
public class ConfigProperty {

    /** 作者名字 */
    @Value("${author_name}")
    private String authorName;
    /** 項目信息 */
    @Value("${project_info}")
    private String projectInfo;

    public String getAuthorName() {
        return authorName;
    }

    public void setAuthorName(String authorName) {
        this.authorName = authorName;
    }

    public String getProjectInfo() {
        return projectInfo;
    }

    public void setProjectInfo(String projectInfo) {
        this.projectInfo = projectInfo;
    }

}

3.新建測試類:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"classpath:applicationContext2.xml"})
public class ConfigPropertyTest {
 
    @Resource(name = "configProperty")
    private ConfigProperty configProperty;
     
    /**
     * 測試Spring注解獲取properties文件的值
     */
    @Test
    public void test() {
        System.out.println(configProperty.getAuthorName());
        System.out.println(configProperty.getProjectInfo());
    }
 
}

總結:

1.使用PropertiesFactoryBean管理屬性文件獲取屬性的方式:

@Value("${properties_key}")

和org.springframework.beans.factory.config.PropertiesFactoryBean有點不同;

 

2.在spring配置文件中,對於bean的配置有這樣一個配置:

<property name="ignoreUnresolvablePlaceholders" value="true" />   

這個主要是為了解決拋出cannot be resolved的異常。

 

 

【轉】 http://blog.csdn.net/lee0723/article/details/48715827

         http://blog.csdn.net/lee0723/article/details/48716515


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM