tomcat 변수를 web.xml 에서 사용하기 질문드립니다.

5,467 views
Skip to first unread message

스프링이모야

unread,
Feb 17, 2014, 11:43:53 PM2/17/14
to ks...@googlegroups.com
안녕하세요.
질문 하나만 올리겠습니다.

자바 web.xml 에서 변수를 사용하고싶은데요.
이 변수는 tomcat 에서 선언하구요.
예를들면.. 
context.xml 에
<Environment name="environment" type="java.lang.String" value="dev"/>
이렇게 지정하고

web.xml 에서는
<listener> 
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:properties/${environment}/log4j.xml</param-value>
</context-param>

이렇게 사용 할려구 합니다.


로컬 개발 환경에서는 잘되는데요.

eclipse - server - open launch configuration - Environment 에 추가 하고나면
로컬 개발에서는 잘되는데요.

서버쪽에서는 변수를 못 읽어 옵니다.

근데 이상한건 web.xml 을 제외한 다른 xml 설정 파일에서는 변수를 읽어들입니다.(common-context.xml 같은.)


요약하면.
context.xml 에
<Environment name="environment" type="java.lang.String" value="dev"/>
라고 지정한 변수가
web.xml 에서 못읽어들인다는것.
근데 다른 설정 파일xml 에서는 읽어들인다는 것이고요.

web.xml 에서 tomcat 에서 지정한 변수를 읽을려면 어찌 해야되는지요?

Ace-T

unread,
Feb 25, 2014, 2:37:01 AM2/25/14
to ks...@googlegroups.com
안녕하세요^^

web.xml에 변수 바인딩 시키고 싶으신건가요?

제가 잠깐 해보니...tomcat쪽에 설정하시는 것보다 VM Argument에 설정을 하신 뒤에 web.xml에서 ${}를 통해서 하시면 될 것 같아요!

ex) web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/context/context-${Server}.xml
 classpath:spring/context/context-datasource.xml
 classpath:spring/context/context-ehcache.xml
 classpath:spring/context/context-interceptor.xml
 classpath:spring/context/context-mybatis.xml
 classpath:spring/context/context-properties.xml
 <!-- classpath:spring/context/context-security.xml -->
 classpath:spring/context/context-servlet.xml
 classpath:spring/context/context-transaction.xml
 
</param-value>

</context-param>

tomcat에서는
Server 떱 클릭하면 Overview화면이 나오잖아요? 거기에서 Open launch configuration 을 눌러보시면 Arguments > VM arguments 쪽에 -DServer=dev   요런식으로 넣어주시면 됩니다~

tomcat이 올라가면서 web.xml에서는 context-${Server}.xml  이부분이 바인딩 되어서 context-dev.xml 이 되겠죠! 

도움이 되셨는지 모르겠네요..^^;;


Ace-T

unread,
Feb 25, 2014, 2:37:01 AM2/25/14
to ks...@googlegroups.com

이상용

unread,
Feb 25, 2014, 9:17:58 AM2/25/14
to ks...@googlegroups.com
@Profile 을 한번 찾아보시는게 어떨지요..
WAS option 에  
-DSpring.profiles.active=dev

<beans profile="dev">...</bean>

이런식으로 나눌수있거든요^^


2014년 2월 25일 오후 4:37, Ace-T <acet...@gmail.com>님이 작성:
--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 ksug+uns...@googlegroups.com에 이메일을 보내세요.
http://groups.google.com/group/ksug에서 그룹을 방문하세요.
더 많은 옵션을 보려면 https://groups.google.com/groups/opt_out을(를) 방문하세요.



--

KwonNam Son

unread,
Feb 25, 2014, 10:25:41 PM2/25/14
to ks...@googlegroups.com
첫번째 방법은 Spring Profile을 사용하고, 해당 설정은 별도의 프라퍼티 파일로 빼는 것이고,
두번째 방법은 Servlet 3.0의 Java 기반 Web 설정을 사용하는 것입니다.
모든 동적인 설정을 자유롭게 하실 수 있게 됩니다.

제가 보기엔 Java 기반 서블릿 설정이 나을 것 같습니다. 저 같은 경우 막상 해놓고 나니까 너무 편하네요.


2014년 2월 25일 오후 11:17, 이상용 <kr.goo...@gmail.com>님이 작성:



--
* 까먹지말자! http://kwon37xi.egloos.com

sh kim

unread,
Feb 26, 2014, 3:31:50 AM2/26/14
to ks...@googlegroups.com
답변 감사드립니다.
VM Argument 로 지정을..
catalina.bat 에서 JAVA_OPTS 에 붙여주니 되네요 ^^(catalina.sh 도 동일하겠쬬~)

예)
set JAVA_OPTS= ... -DServer=dev



@Profile
-DSpring.profiles.active=dev
Servlet 3.0의 Java 기반 Web 설정 
방법은 어찌하는지? 몰라서 못해봤는데요.
좀 찾아봐야겠네요 ^^







2014년 2월 26일 오후 12:25, KwonNam Son <kwon...@gmail.com>님이 작성:

이수홍

unread,
Feb 26, 2014, 9:09:19 PM2/26/14
to ks...@googlegroups.com
변수를 떠나서

지금 기술 하신 예제만 보고 log4j.xml을 동적으로 하시고 싶으시면 
log4j.configuration 라는 환경 변수 이름으로 바꿀 수 있습니다.
http://scarlett.tistory.com/125 요기에서 참조 하시면 될 듯합니다.
해당 디플로이하는 곳에 환경 변수를 설정 해두면 그 쪽에서는 해당 설정만 읽겠죠 

2014. 2. 18., 오후 1:43, 스프링이모야 <ksh...@gmail.com> 작성:

sh kim

unread,
Feb 27, 2014, 11:01:53 PM2/27/14
to ks...@googlegroups.com
제가 현재 질문은 log4j 만 작성하였는데요
사실은 환경자체 설정파일을 다르게 주고싶은게 목적입니다.
로컬에서의 DB정보, 파일저장위치.. 등등
서버에서의 DB정보, 파일저장위치.. 등등

각각 다르기에 환경에 대한 정보는  WAS에서 기술을 하고 소스는 하나로 관리하자는게 목적이었습니다.

알려주신 log4j.configuration 설정은 몰랐떤 부분이니 보고 공부를 더 해야겠네요^^






2014년 2월 27일 오전 11:09, 이수홍 <sbc...@gmail.com>님이 작성:

namkyu Lee

unread,
Feb 27, 2014, 11:21:49 PM2/27/14
to ks...@googlegroups.com
저희는 아래와 같은 방법으로 관리하고 있습니다.

JAVA arguments에 -Dspring.profiles.active=dev 를 추가하여 각 환경을 구분합니다.

<!-- ============================================================= -->
<!-- properties -->
<!-- ============================================================= -->

<util:properties id="appConfig" location="classpath:config/${spring.profiles.active}-config.xml" />
<context:property-placeholder properties-ref="appConfig" />

 
<!-- ============================================================= -->
<!-- dataSource -->
<!-- ============================================================= -->

<beans profile="dev">
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="#{baseConfig['jdbc.driver']}" />
<property name="jdbcUrl" value="#{baseConfig['jdbc.url']}" />
<property name="user" value="#{baseConfig['jdbc.username']}" />
<property name="password" value="#{baseConfig['jdbc.password']}" />
<property name="acquireRetryAttempts" value="10" />
<property name="preferredTestQuery" value="SELECT 1;" />
<property name="testConnectionOnCheckin" value="true" />
<property name="testConnectionOnCheckout" value="false" />
<property name="maxIdleTime" value="300" />
<property name="idleConnectionTestPeriod" value="30" />
<property name="initialPoolSize" value="2" />
<property name="maxPoolSize" value="10" />
</bean>
</beans>

<beans profile="test">
<jdbc:embedded-database id="dataSource" type="HSQL">
<jdbc:script location="classpath:schema.sql"/>
</jdbc:embedded-database>
</beans>



2014년 2월 28일 오후 1:01, sh kim <ksh...@gmail.com>님이 작성:

StyLe_jG

unread,
Mar 3, 2014, 2:17:36 AM3/3/14
to ks...@googlegroups.com
혹시 프로젝트가 메이븐 기반으로 되어있다면 메이븐의 Resource Filtering을 고려해 보시는건 어떨지요~


2014년 2월 28일 금요일 오후 1시 1분 53초 UTC+9, 스프링이모야 님의 말:
Reply all
Reply to author
Forward
0 new messages