[SPRING] Spring applicationContext.xml에서 JVM 인수를 읽는 방법
SPRINGSpring 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.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.PropertyPlaceholderConfigurer를 등록하면 시스템 등록 정보를 대체 시스템으로 사용합니다.
PropertyPlaceholderConfigurer를 등록하면 시스템 등록 정보를 대체 시스템으로 사용합니다.
예를 들어, add
<context:property-placeholder/>
귀하의 구성에. 그런 다음 XML 구성이나 @Value 주석에서 $ {environment}을 사용할 수 있습니다.
-
==============================
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.# {systemProperties [ 'env']} 사용 기본적으로 Java 명령 행에 사용 된 propertyName을 -DpropertyName = value로 전달하십시오. 이 경우에는 -Denv = development이므로 env가 사용되었습니다.
# {systemProperties [ 'env']} 사용 기본적으로 Java 명령 행에 사용 된 propertyName을 -DpropertyName = value로 전달하십시오. 이 경우에는 -Denv = development이므로 env가 사용되었습니다.
-
==============================
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.봄 3.0.7
봄 3.0.7
<context:property-placeholder location="classpath:${env:config-prd.properties}" />
그리고 런타임에 설정 : -Denv = config-dev.properties
설정되지 않은 경우 "env"는 기본값 "config-prd.properties"를 사용합니다.
from https://stackoverflow.com/questions/5598217/how-do-i-read-jvm-arguments-in-the-spring-applicationcontext-xml by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Ldap 인증 및 데이터베이스 권한에 대한 스프링 보안 스위치 (0) | 2019.01.12 |
---|---|
[SPRING] Spring MVC : 컨트롤러에서 보낸 json 응답을 수정하는 방법 (0) | 2019.01.12 |
[SPRING] 여러 파일이있는 Spring 3 @ImportResource (0) | 2019.01.12 |
[SPRING] Spring을 사용하여 수동으로 bean을 autowire하는 방법은 무엇입니까? (0) | 2019.01.12 |
[SPRING] Spring @Configuration 클래스 이해하기 (0) | 2019.01.12 |