Spring 에서 Properties 프로필 사용(1)

1. jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test
jdbc.username=root
jdbc.password=123
2.conf.xml
<bean id="propertyConfigurer"  
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
        <property name="location">  
            <value>jdbc.properties</value>  
        </property>  
    </bean>  
<bean id="dataSource"  
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
        <property name="driverClassName">  
            <value>${jdbc.driverClassName}</value>  
        </property>
        <property name="url">  
            <value>${jdbc.url}</value>  
        </property>  
        <property name="username">  
            <value>${jdbc.username}</value>  
        </property>  
        <property name="password">  
            <value>${jdbc.password}</value>  
        </property>  
    </bean> 
3.Config.java
package com.starxing.test;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.FileSystemResource;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class Config {
    public static void main(String[] args) {
        XmlBeanFactory factory = new XmlBeanFactory(new FileSystemResource(
                "com/starxing/test/conf.xml"));
        //     BeanFactory   ,bean factory post-processor      :
        PropertyPlaceholderConfigurer cfg = new PropertyPlaceholderConfigurer();
        cfg.setLocation(new FileSystemResource("com/starxing/test/jdbc.properties"));
        cfg.postProcessBeanFactory(factory);
        DriverManagerDataSource dataSource = (DriverManagerDataSource) factory.getBean("dataSource");
        System.out.println(dataSource.getDriverClassName());
        //   ,ApplicationContext                  BeanFactoryPostProcessor bean。     ,   ApplicationContext     PropertyPlaceholderConfigurer      。      ,            bean
        // factory postprocessor     ApplicationContext  BeanFactroy。
        ApplicationContext context = new ClassPathXmlApplicationContext("com/starxing/test/conf.xml");
        DriverManagerDataSource dataSource2 = (DriverManagerDataSource) context.getBean("dataSource");
        System.out.println(dataSource2.getDriverClassName());
    }
}

관련 문서:
이 솔 루 션 을 사용 하면 다음 과 같은 속성 파일(/WEB-INF/jdbc.properties)을 생 성 할 수 있 습 니 다.
jdbc.driver=org.postgresql.Driver
jdbc.url=jdbc:postgresql://localhost/test
jdbc.user=postgres
jdbc.password=123
우리 빈 설정 은 다음 과 같 습 니 다:
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

/WEB-INF/jdbc.properties


class="org.springframework.jdbc.datasource.DriverManagerDataSource">

${jdbc.driver}


${jdbc.url}


${jdbc.user}


${jdbc.password}


위 에서 말 한 바 와 같이,우 리 는 Property Placeholder Configure 류 의 실례 를 정의 하고,그 위치 속성 을 우리 의 속성 파일 로 설정 합 니 다.이 종 류 는 빈 공장 의 백 프로세서 로 구현 되 며,모든 자리 표시 자(${...}value)대신 파일 에 정 의 된 속성 을 사용 합 니 다.
이 기술 을 이용 하여 우 리 는 applicationContext.xml 에서 호스트 에 지정 한 모든 설정 속성 을 제거 할 수 있 습 니 다.이러한 방식 을 통 해 우 리 는 호스트 속성 에 대한 동기 성 을 걱정 하지 않 고 이 파일 에 새로운 Bean 을 자 유 롭 게 추가 할 수 있 습 니 다.이렇게 하면 생산 배치 와 유 지 를 간소화 할 수 있다.
Property Placeholder Configurer 는 bean factory post-processor 로 구현 되 며,BeanFactory 정의 의 속성 값 을 다른 단독 자바 Properties 형식의 파일 에 배치 할 수 있 습 니 다.이 때문에 사용 자 는 BeanFactory 의 주 XML 정의 파일 을 복잡 하고 위험 하 게 수정 하지 않 아 도 기본 적 인 속성(예 를 들 어 데이터 뱅 크 의 url,사용자 이름과 비밀번호)을 맞 출 수 있 습 니 다.
BeanFactory 가 정의 하 는 세 션 을 고려 하여 자리 차지 문자 로 DataSource 를 정의 합 니 다.
다음 예 에서 datasource 를 정의 하고 외부 Porperties 파일 에 관련 속성 을 설정 합 니 다.실행 할 때,우 리 는 BeanFactory 에 Property Placeholder Configurer 를 제공 합 니 다.Properties 파일 의 값 으로 이 datasource 의 속성 값 을 대체 합 니 다.

${jdbc.driverClassName}
${jdbc.url}
${jdbc.username}
${jdbc.password}

실제 값 은 다른 Properties 형식의 파일 에서 나 옵 니 다:
jdbc.driverClassName=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:hsql://production:9002
jdbc.username=sa
jdbc.password=root
BeanFactory 에서 사용 하려 면 bean factory post-processor 를 수 동 으로 실행 해 야 합 니 다:
XmlBeanFactory factory = new XmlBeanFactory(new FileSystemResource("beans.xml"));
PropertyPlaceholderConfigurer cfg = new PropertyPlaceholderConfigurer();
cfg.setLocation(new FileSystemResource("jdbc.properties"));
cfg.postProcessBeanFactory(factory);
응용 프로그램 Context 는 그 위 에 배 치 된 BeanFactory PostProcessor 의 bean 을 자동 으로 식별 하고 응용 할 수 있 음 을 주의 하 십시오.애플 리 케 이 션 Context 를 사용 할 때 Property Placeholder Configure 를 사용 하 는 것 이 편리 하 다 는 뜻 이다.이 때문에 이 나 다른 bean factory postprocessor 를 사용 하려 는 사용 자 는 BeanFactroy 대신 ApplicationContext 를 사용 하 는 것 을 권장 합 니 다.
Property Place Holder Configure 는 지정 한 Porperties 파일 에서 속성 을 찾 을 뿐만 아니 라 사용 하고 싶 은 속성 을 찾 지 못 하면 자바 시스템 properties 에서 도 찾 을 수 있 습 니 다.이 행 위 는 설정 에 있 는 systemPropertiesMode 속성 을 설정 하여 맞 출 수 있 습 니 다.이 속성 은 세 개의 값 이 있 습 니 다.하 나 는 설정 을 항상 덮어 쓰 고 하 나 는 영원히 덮어 쓰 지 않 습 니 다.하 나 는 properties 파일 에서 만 찾 을 수 없 을 때 덮어 씁 니 다.Properties Placeholder Configurer 의 자바 독 을 참고 하여 더 많은 정 보 를 얻 으 십시오.

좋은 웹페이지 즐겨찾기