property를 각 개발 환경에 맞게 local dev prob 로 나누어 사용하는 것이 일반적이다.
하드코딩으로 설정을 넣으면 안되기에, 서버에 직접 설정을 주어 상황에 맞게 연결되게하는 것이 일반적인데,
리눅스는 설정법이 조금 다르다.
context 설정 파일에
<bean id="egov.propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:/경로/globals_#{systemProperties['spring.profiles.active']}.properties</value>
</list>
</property>
</bean>
이렇게 properties 파일의 위치와 명을 지정해주고,
자바에도 properties 정의가 되어있다면,
public class EgovProperties {
final static String SET_PROFILE = System.getProperty("spring.profiles.active");
public static final String GLOBALS_PROPERTIES_FILE = 경로 + "globals_" + SET_PROFILE + ".properties";
}
자바에도 위치와 명을 지정해준다.
그리고 system property의 key value 값을 주는 방법이 3가지가 있다.
tomcat server에서 overview > launch configuration > arguments > VM arguments
-Dspring.profiles.active=local 를 추가해주는 것이다.
EgovWebServletContextListenter class에서 profile 설정을 해줄 때,
System.setProperty("spring.profiles.active","local") 로 주어 context 파일에 연결해주는 것이다.
tomcat/bin/catalina.sh 에서
JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active=local" 를 넣어 설정해주는 방법인데
리눅스에서는 좀 다른듯하다.
catalina.sh에서 안되서 catalina.bat에서 설정해보고 이것저것 정말 많이 해봤지만 안됬다.
다른 방법으로 setenv.sh 파일을 만들어 catalina.sh에서 연결해주어 실행시키는 방법이다.
1) 동일하게 tomcat/bin/ 경로에서 touch setenv.sh 명령어를 작성하고 setenv.sh 파일을 만든다.
2) catalina.sh에서
# Ensure that any user defined CLASSPATH variables are not used on startup,
# but allow them to be specified in setenv.sh, in rare case when it is needed.
CLASSPATH=
if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
. "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
. "$CATALINA_HOME/bin/setenv.sh"
fi
를 작성하고 setenv.sh파일을 연결해준다.
3) setenv.sh에서도 받을 준비를 해주자.
JAVA_OPTS=$JAVA_OPTS" -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=384m -XX:MaxNewSize=384m -XX:PermSize=128m -XX:MaxPermSize=128m"
JAVA_OPTS=$JAVA_OPTS" -XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$CATALINA_HOME/logs"
JAVA_OPTS=$JAVA_OPTS" -XX:ParallelGCThreads=2 -XX:-UseConcMarkSweepGC"
JAVA_OPTS=$JAVA_OPTS" -XX:-PrintGC -XX:-PrintGCDetails -XX:-PrintGCTimeStamps -XX:-TraceClassUnloading -XX:-TraceClassLoading"
JMX_OPTS=" -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.authenticate=false \
-Djava.rmi.server.hostname=${HOSTNAME} \
-Dcom.sun.management.jmxremote.ssl=false "
CATALINA_OPTS=" ${JMX_OPTS} ${CATALINA_OPTS}"
4) 마지막으로 setenv.sh 파일에
export JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.division=local"
구문을 추가해준다.
3번의 방식을 사용하는 이유는,
catalina.sh 파일에는 기본적으로 다양한 설정이 존재하기 때문에 설정 변경시 실수하여 문제가 발생 할 수 있다.
그렇게에 bin 디렉토리 안에 setenv.sh 파일을 생성하고 추가 커스텀 옵션을 설정할 수 있게 한다.
추가 커스텀 옵션을 별도 파일에 설정해둠으로서
톰캣을 업그레이드 하거나 다른 서버에 확장을 할 때에도 유지보수가 뛰어난점이 있다.
1번의 방식은 보통 local 에서 많이 사용하고 3번은 개발, 상용서버에 많이 적용하는 것으로 보인다.
| war 파일 만들고 압축 풀기 (0) | 2023.05.26 |
|---|---|
| 리눅스 기본 명령어 및 spring 서버 관리 (0) | 2023.05.16 |