복붙노트

[SPRING] spring xml 설정에 환경 변수를 주입하는 방법은 무엇입니까?

SPRING

spring xml 설정에 환경 변수를 주입하는 방법은 무엇입니까?

AWS는 환경 변수를 설정 한 후 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_Java.managing.html의 System.getProperty ( "JDBC_CONNECTION_STRING")에 대해 설명합니다. System.getProperty 내 Spring XML 구성 코드 내에서 System.getProperty를 호출 할 수 없다는 점을 제외하고는 리소스 번들 바로 가기를 호출 할 수 없습니다. 리소스 번들 자체가 이러한 환경 변수를 어떻게 든 추출해야하기 때문에 리소스 번들 바로 가기를 호출 할 수 있습니다. 환경 변수를 사용하기 위해이 예제 설정을 변환 해 주시기 바랍니다. :-)

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://secrethost:007/whois?autoReconnect=true" />
    <property name="username" value="bond" />
    <property name="password" value="abuginsidemistycorner" />
    <property name="initialSize" value="100" />

    <property name="minEvictableIdleTimeMillis">
        <value>300000</value>
    </property>

    <property name="timeBetweenEvictionRunsMillis">
        <value>60000</value>
    </property>

    <property name="maxIdle" value="20" />
</bean>

사람들이 여기서 무엇을하는지 이해할 수 없었습니다.

Spring FileSystemResource에 환경 변수 기반 위치를 사용할 수 있습니까? 최근 스프링 버전에서 작동합니까?

해결법

  1. ==============================

    1.먼저 요소를 구성에 추가하십시오.

    먼저 요소를 구성에 추가하십시오.

    <context:property-placeholder />
    

    그런 다음 설정에서 자리 표시자를 사용하기 만하면됩니다.

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="${JDBC_CONNECTION_STRING}" />
        <property name="username" value="bond" />
        <property name="password" value="abuginsidemistycorner" />
        <property name="initialSize" value="100" />
        <property name="minEvictableIdleTimeMillis" value="30000" />
        <property name="timeBetweenEvictionRunsMillis" value="60000" />
        <property name="maxIdle" value="20" />
    </bean>
    

    자리 표시 자 이름이 설정 한 변수와 일치하는지 확인하십시오.

  2. ==============================

    2.org.springframework.beans.factory.config.PropertyPlaceholderConfigurer 클래스를 사용하여 등록 정보 파일을로드하는 경우 SYSTEMPropertiesMode 등록 정보를 SYSTEM_PROPERTIES_MODE_OVERRIDE 값으로 설정할 수 있습니다.

    org.springframework.beans.factory.config.PropertyPlaceholderConfigurer 클래스를 사용하여 등록 정보 파일을로드하는 경우 SYSTEMPropertiesMode 등록 정보를 SYSTEM_PROPERTIES_MODE_OVERRIDE 값으로 설정할 수 있습니다.

    spring.xml에는 다음과 같은 bean이 있습니다.

    <bean id="propertyPlaceholder"
            class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
        <property name="locations">
            <list>
                <value>classpath://file.properties</value>                  
            </list>
        </property>
    </bean>
    

    Spring은 다음과 같이 시스템 프로퍼티들을로드 할 것이다 :

    이 방법으로 시스템 특성을 정상 특성으로 읽을 수 있어야합니다.

  3. ==============================

    3.JavaConfig를 사용하는 사람 :

    JavaConfig를 사용하는 사람 :

    @Configuration 파일에 다음이 있어야합니다.

    @Bean 
    public static PropertyPlaceholderConfigurer properties() {
    
        PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
        ClassPathResource[] resources = new ClassPathResource[ ] {
            new ClassPathResource("db.properties")
        };
        ppc.setLocations( resources );
        ppc.setIgnoreUnresolvablePlaceholders( true );
        ppc.setSearchSystemEnvironment(true);
        return ppc;
    }
    
    @Value("${db.url}")
    private String dbUrl; 
    @Value("${db.driver}")
    private String dbDriver;
    @Value("${db.username}")
    private String dbUsername;
    @Value("${db.password}")
    private String dbPassword;
    
    @Bean
    public DataSource db() {
    
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setUrl(dbUrl);
        dataSource.setDriverClassName(dbDriver);
        dataSource.setUsername(dbUsername);
        dataSource.setPassword(dbPassword);
        return dataSource;
    }
    

    중요 라인은 다음과 같습니다. ppc.setSearchSystemEnvironment (true);

    그 후 db.properties에서, 나는 가지고있다.

    db.url = ${PG_URL}
    db.driver = ${PG_DRIVER}
    db.username = ${PG_USERNAME}
    db.password = ${PG_PASSWORD}
    
  4. from https://stackoverflow.com/questions/18744663/how-to-inject-environmental-variables-inside-spring-xml-configuration by cc-by-sa and MIT license