[SPRING] Tomcat 및 ContextLoaderListener가있는 PropertyPlaceholderConfigurer
SPRINGTomcat 및 ContextLoaderListener가있는 PropertyPlaceholderConfigurer
Tomcat 및 ContextLoaderListener와 함께 PropertyPlaceholderConfigurer를 사용하고 있습니다.
이것은 (하드 코드 된 속성 파일의 이름으로) 작동합니다 :
<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:properties/test.properties"/>
</bean>
그러나 이것 ($ {env}로 대체 된 속성 파일의 이름으로) :
<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:properties/${env}.properties"/>
</bean>
[Thread-2] 15:50:16 ERROR ContextLoader - 컨텍스트 초기화에 실패했습니다. org.springframework.beans.factory.BeanInitializationException : 속성을로드 할 수 없습니다. 중첩 예외는 java.io.FileNotFoundException : 클래스 경로 리소스 [properties / $ {env} .properties]가 존재하지 않기 때문에 열 수 없습니다.
파일을 하드 코드 할 때 작동하므로 파일이 있다는 것을 알고 있습니다.
Tomcat을 시작하고 환경 변수를 설정할 때 -Denv = test를 사용해 보았습니다. 나는 ContextLoaderListener 대신에 내 자신의 main 메소드를 사용하여 Tomcat 외부에서 똑같은 일을한다.
나는 무엇을 잘못하고있을 것인가? Context.xml 또는 web.xml의 항목을 -Denv = test 대신 사용하여 동일한 결과를 얻을 수 있습니까?
감사
추신 : 나는 또한 시도 :
<bean id="initialcorePropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName">
<value>SYSTEM_PROPERTIES_MODE_OVERRIDE</value>
</property>
<property name="searchSystemEnvironment">
<value type="boolean">true</value>
</property>
<property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>
<bean id="corePropertyConfigurer" depends-on="initialcorePropertyConfigurer" lazy-init="true"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:properties/${env}.properties" />
</bean>
하지만 같은 오류가 발생합니다.
해결법
-
==============================
1.PropertyPlaceholderConfigurer 정의에서 속성 자리 표시자를 사용할 수 없습니다. 닭고기와 계란.
PropertyPlaceholderConfigurer 정의에서 속성 자리 표시자를 사용할 수 없습니다. 닭고기와 계란.
그러나 # {systemProperties [ 'env']}를 사용할 수 있습니다.
또는 PropertyPlaceholderConfigurer의 하위 클래스를 만들고 setLocation ()을 재정 의하여 자리 표시자를 처리 할 수 있습니다.
-
==============================
2.CATALINA_OPTS 또는 JAVA_OPTS 환경 변수를 -Denv = test로 설정해야합니다. 이를 수행하는 가장 좋은 방법은 setenv.bat (또는 유닉스에있는 경우 .sh)를 만들고이 환경 변수 정의를 거기에 추가하는 것입니다.
CATALINA_OPTS 또는 JAVA_OPTS 환경 변수를 -Denv = test로 설정해야합니다. 이를 수행하는 가장 좋은 방법은 setenv.bat (또는 유닉스에있는 경우 .sh)를 만들고이 환경 변수 정의를 거기에 추가하는 것입니다.
startup.bat (.sh)의 인수로 전달하면 효과가 없습니다. 여러분이하고있는 일을 가정합니다.
-
==============================
3.전체 위치를 설정하는 대신 -DpropFileLocation = classpath : env1.properties 또는 -DpropFileLocation = classpath : env2.properties와 같이 설정하십시오.
전체 위치를 설정하는 대신 -DpropFileLocation = classpath : env1.properties 또는 -DpropFileLocation = classpath : env2.properties와 같이 설정하십시오.
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="ignoreResourceNotFound" value="true"/> <property name="location" value="${propFileLocation}"/> </bean>
-
==============================
4.이 포럼에 속성 파일을 외부화해야하는 비슷한 질문이있었습니다. 이 솔루션을 확인하십시오. 그것은 문제가 비슷하다고 생각합니다. env를 시스템 변수로 전달하는 대신 env 변수로 설정하십시오.
이 포럼에 속성 파일을 외부화해야하는 비슷한 질문이있었습니다. 이 솔루션을 확인하십시오. 그것은 문제가 비슷하다고 생각합니다. env를 시스템 변수로 전달하는 대신 env 변수로 설정하십시오.
from https://stackoverflow.com/questions/7476615/propertyplaceholderconfigurer-with-tomcat-contextloaderlistener by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Struts에서 구성을로드 할 수 없습니다. (0) | 2019.05.03 |
---|---|
[SPRING] Spring에서 application.properties를 상속받는 방법? (0) | 2019.05.02 |
[SPRING] 스프링 MVC : 오류가있는 페이지로 리디렉션하는 방법? (0) | 2019.05.02 |
[SPRING] Spring MqttPahoMessageDrivenChannelAdapter 연결이 끊어졌습니다 : 연결이 끊어졌습니다; 다시 시도하는 (0) | 2019.05.02 |
[SPRING] 인터셉터 preHandle ()이 login.html로 리디렉션되지 않음 (0) | 2019.05.02 |