상세 컨텐츠

본문 제목

profile 설정 Dspring.profiles.active

OS/리눅스

by H_Develop 2023. 5. 16. 12:50

본문

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가지가 있다.

 

1. tomcat 

tomcat server에서 overview > launch configuration > arguments > VM arguments

-Dspring.profiles.active=local 를 추가해주는 것이다.

2. EgovWebServletContextListenter 

EgovWebServletContextListenter class에서 profile 설정을 해줄 때,

System.setProperty("spring.profiles.active","local") 로 주어 context 파일에 연결해주는 것이다.

3. catalina.sh, setenv.sh

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번은 개발, 상용서버에 많이 적용하는 것으로 보인다.

'OS > 리눅스' 카테고리의 다른 글

war 파일 만들고 압축 풀기  (0) 2023.05.26
리눅스 기본 명령어 및 spring 서버 관리  (0) 2023.05.16

관련글 더보기