보통 개발환경은 최소 2개 이상으로 나뉜다.
local, dev(개발), oper(운영) 등등..
was(웹어플리케이션서버)에 .war(컴파일된 소스)를 deploy(반영/배포) 할 때마다 환경(호출해야하는 이미지서버 도메인주소 등)이 달라지므로 디플로이하는 환경에 맞춰 읽어들여야 할 property 파일들을 달리 처리 해야 한다. (local일땐 local.property를, 개발일땐 dev.property를 ... )
이를 매번 반영할 때마다 환경에 맞게 필요없는 프로퍼티 파일들을 제거한 후 deploy 하기도 번거롭고
deploy 해놓고 vi (리눅스 visual editor) 로 property 불러오는 스프링 context.xml 을 수정하기도 번거롭다.
이런 번거로운 수고를 덜기 위해, 동적으로 프로퍼티를 적용하는 방법은 아래와 같이 몇가지가 있다.
1. 서버(WAS)의 ip 값을 기준으로 property 를 분기처리 하는 방법
was 에서 ip를 얻어올 땐 java.net.InetAddress클래스의 getHostAddress() 사용.
가져온 ip주소와 하드코딩 해놓은 was ip 비교하여 property 파일을 분기처리.
서버정보가 바뀔 경우 소스레벨에서의 수정이 필요하므로 그닥 좋은 방법 같진 않다..
[SAMPLE CODE]
1
2
3
4
5
6
|
InetAddress iAddr = InetAddress.getLocalHost();
String adr = iAddr.getHostAddress();
String prefix = "";
if(adr.indexOf("127.0.0.1") > -1){
prefix = "local"
} else if (//... 생략
|
cs |
2. 서버(WAS)의 환경 변수를 기준으로 property를 분기처리 하는 방법
2-1. was서버 설정
1) 보통 was 실행하는 쉘 스크립트인 start.sh 을 vi 로 들여다 보면 JAVA_OPTS 을 선언한 부분을 찾을 수 있다.
없다면 start.sh 내에서 호출하는 다른 쉘을 vi 로 또 한 번 들여다보자.
찾았다면 JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active=dev" 와 같이 한 줄을 추가한다.
못 찾겠으면
./start.sh -Dspring.profiles.active=dev &
와 같이 서버구동용 쉘스크립트에 위와 같은 옵션을 주어 실행하면
위와 같이 할 경우, spring.profiles.active 라는 key 에 dev 라는 value를 갖는 환경변수를 설정한 셈이 된다.
2) 스프링 property 설정 수정
1
|
<util:properties id="properties" location="classpath:sample/properties/conf_#{systemProperties['spring.profiles.active']}.properties" />
|
cs |
이와 같이 설정시
sample/properties/conf_환경변수.properties 프로퍼티를 주입하게 된다.
(환경변수는 로컬 vm arguments(2-1)와 서버별 was 환경변수로 지정한 spring.profiles.active 값)
별다른 코드를 짜지 않아도 위와 같은 설정만으로 서버 환경별 property 를 동적으로 주입받게 되는 것이다.
2-2. 로컬설정
사용중인 서버(jboss) 더블클릭 > Open launch configuration > VM arguments 에
-Dspring.profiles.active=local 추가 (톰캣도 같다)
※ 만약 로컬 환경에서 사용 할 프로퍼티 파일명을 sample/properties/conf_.properties 와 같이 사용할 경우 환경변수를 잡아 줄 필요가 없다.
※ 환경변수(JAVA_OPTS)로 선언할 땐 -Dspring ~ 과 같이 D를 붙여주고 그 외(소스)에는 D를 빼주어야 한다는 걸 주의
[사용예]
서버 환경 별로 사용하는 js 가 달라지는 경우 (서버 환경 별로 js 내의 목적지 ip 가 달라지거나 하는 경우)
@Controller :
1
2
|
@Value("#{systemProperties['spring.profiles.active'].js})"
private String jsFileNm;
|
cs |
JSP :
1
|
<script src="/resources/js/${jsFileNm}" />
|
cs |
와 같이 사용하여 서버 환경 별로 달라지는 js 파일명을 동적으로 가져다 사용할 수 있다.
'back > Spring Framework' 카테고리의 다른 글
[Spring Fw] POI(Excel lib) 를 사용하여 다운로드하기 (7) | 2019.07.15 |
---|---|
스프링프레임워크 log4j2 설정 : Spring Framework + log4j 2 + slf4j + jboss/wildfly(ver 9) (0) | 2019.05.10 |
jar(lib) 동적 빌드 및 배포(profiles 사용) (0) | 2019.04.26 |
스프링프레임워크 AOP를 사용한 로그 출력 : Spring + AOP + logger (0) | 2019.04.19 |
Exception클래스의 구현과 AOP 설정을 이용한 예외처리 (0) | 2019.02.12 |