복붙노트

[SPRING] Spring applicationContext.xml에서 JVM 인수를 읽는 방법

SPRING

Spring applicationContext.xml에서 JVM 인수를 읽는 방법

Spring과 JSF 웹 응용 프로그램이 있고 applicationContext.xml에서 JVM 인수를 참조하는 방법을 찾으려고합니다. 환경 변수 (예 : -Denv = development)를 사용하여 JVM을 시작합니다. 나는 다음과 같은 몇 가지 접근법을 찾아서 시도했다.

<bean id="myBean" class="com.foo.bar.myClass">
  <property name="environment">
    <value>${environment}</value>
  </property>
</bean>

그러나 MyClass에서 setter 메서드를 호출하면 "development"대신 "$ {environment}"문자열이 전달됩니다. 나는 System.getProperty ()를 사용하기위한 작업을하고 있지만 Spring을 통해이 값들을 설정할 수 있도록 더 좋고 깨끗합니다. 이 일을 할 수있는 방법이 있습니까?

편집하다: 전에 언급 했어야 할 것은 JDBC 연결을 사용하여 데이터베이스에서 속성을로드한다는 것입니다. 내 구성에 속성 자리 표시자를 추가하면 데이터베이스에서로드 된 속성이 속성 자리 표시 자에 의해 무시되므로 복잡성이 추가되는 것 같습니다. 그것이 주문에 의존적인지 또는 어떤 것인지 확실하지 않습니다. 그것은 내가 할 수있는 것과 같지만 둘 다 할 수는 없다.

편집하다: 현재 다음 구성을 사용하여 속성을로드 중입니다.

<bean id="myDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="jdbc.mydb.myschema"/> 
</bean>

<bean id="props" class="com.foo.bar.JdbcPropertiesFactoryBean">
    <property name="jdbcTemplate">
        <bean class="org.springframework.jdbc.core.JdbcTemplate">
            <constructor-arg ref="myDataSource" />
        </bean>
    </property>
</bean>

<context:property-placeholder properties-ref="props" />

해결법

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

    1.Spring EL 표현식을 사용할 수 있습니다. #Detest = "hallo welt"에 대한 # {systemProperties.test}입니다.

    Spring EL 표현식을 사용할 수 있습니다. #Detest = "hallo welt"에 대한 # {systemProperties.test}입니다.

    귀하의 경우 그것은해야합니다 :

    <bean id="myBean" class="com.foo.bar.myClass">
      <property name="environment">
        <value>#{systemProperties.environment}</value>
      </property>
    </bean>
    

    $ 대신 #은 실수가 아닙니다!

    $는 place holder를 참조하고, #는 bean을 참조하고, systemProperties는 bean입니다.

    맞춤법 오류 일 수 있지만 문제의 원인이 될 수 있습니다. 명령 줄 문에 대한 예제에서 변수 이름을 env

    그러나 봄 구성에서는 환경의 이름을 지정합니다. 그러나 둘은 물론 같아야합니다!

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

    2.PropertyPlaceholderConfigurer를 등록하면 시스템 등록 정보를 대체 시스템으로 사용합니다.

    PropertyPlaceholderConfigurer를 등록하면 시스템 등록 정보를 대체 시스템으로 사용합니다.

    예를 들어, add

    <context:property-placeholder/>
    

    귀하의 구성에. 그런 다음 XML 구성이나 @Value 주석에서 $ {environment}을 사용할 수 있습니다.

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

    3.다음과 같이 시스템 특성 env에 따라 특성 파일을로드 할 수 있습니다.

    다음과 같이 시스템 특성 env에 따라 특성 파일을로드 할 수 있습니다.

       <bean id="applicationProperties"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
          <property name="ignoreResourceNotFound" value="false" />
          <property name="ignoreUnresolvablePlaceholders" value="true" />
          <property name="searchSystemEnvironment" value="false" />
          <property name="locations">
             <list>
                <value>classpath:myapp-${env:prod}.properties</value>
             </list>
          </property>
       </bean>
    

    env가 프로덕션 환경에 기본으로 설정되어 있지 않으면 개발 팀과 테스트 팀이 -Denv = development 또는 -Denv = testing을 적절하게 설정하여 응용 프로그램을 개발할 수 있습니다.

  4. ==============================

    4.# {systemProperties [ 'env']} 사용 기본적으로 Java 명령 행에 사용 된 propertyName을 -DpropertyName = value로 전달하십시오. 이 경우에는 -Denv = development이므로 env가 사용되었습니다.

    # {systemProperties [ 'env']} 사용 기본적으로 Java 명령 행에 사용 된 propertyName을 -DpropertyName = value로 전달하십시오. 이 경우에는 -Denv = development이므로 env가 사용되었습니다.

  5. ==============================

    5.흥미롭게도, Spring은 PropertySources를 통해 이러한 요구를보다 정상적으로 처리하기 위해 발전해 왔습니다. http://spring.io/blog/2011/02/15/spring-3-1-m1-unified-property-management/

    흥미롭게도, Spring은 PropertySources를 통해 이러한 요구를보다 정상적으로 처리하기 위해 발전해 왔습니다. http://spring.io/blog/2011/02/15/spring-3-1-m1-unified-property-management/

    몇 가지 구성 및 웹 응용 프로그램에서 작업하는 경우 사용자 지정 ApplicationInitializer를 사용하면 속성 자리 표시 자에서 시스템, 환경 및 사용자 지정 속성을 처리 할 수 ​​있습니다. Spring은 Spring 설정에있을 때 사용되는 PropertySourcesPlaceholderConfigurer를 제공한다. 그러면 속성 파일에서 시스템을 찾은 다음 환경을 찾습니다.

  6. ==============================

    6.봄 3.0.7

    봄 3.0.7

    <context:property-placeholder location="classpath:${env:config-prd.properties}" />
    

    그리고 런타임에 설정 : -Denv = config-dev.properties

    설정되지 않은 경우 "env"는 기본값 "config-prd.properties"를 사용합니다.

  7. from https://stackoverflow.com/questions/5598217/how-do-i-read-jvm-arguments-in-the-spring-applicationcontext-xml by cc-by-sa and MIT license