특정 url을 특정서버 예를들면 운영서버에서는 사용하고 싶지 않았다.
하지만 그렇다고 주석처리는 싫다! 왜냐하면 그때 그때 주석처리를 하고 안하고 하면 실수가 있기 때문이다.
그래서 생각한 것은 아래와 같다.
1. application.properties의 값을 이용해 on/off 하는 방법을 찾는다.
2. 기존에 테스트서버와 운영서버 war를 동일한 파일로 했었는데 파일명을 다르게 하여 구분한다.
내 개발환경은 간단하게 아래와 같다.
1. spring boot 2.4.3
2. java 1.8
3. gradle 6.8.3
이제부터 적용한 내용이다!
시작하기에 앞서 application.properties는 서버별로 분리되어야 한다. (아래 링크 참조)
1. Controller 활성화, 비활성화 : @ConditionalOnExpression
내가 적용한 샘플은 아래와 같다.
1) Controller에 @ConditionalOnExpression 사용 (4번라인)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
@ResController
@ConditionalOnExpression("${my.controller.enabled:false}")
public class SampleContoroller {
@GetMapping(value = "/callUrl1")
public String call1() {
....
}
@GetMapping(value = "/callUrl2")
public String call2() {
....
}
}
|
cs |
2) 각각의 application.properties에 필요에 따라 my.controller.enabled 값 설정
1
2
|
# controller enabled/disabled : true/false or remove
my.controller.enabled=true
|
cs |
이렇게 하면 설정에 맞춰 해당 컨트롤러를 활성화 할 수 있다.
2. war 파일 배포시 실수를 줄이기 위해 테스트서버, 운영서버 용 파일을 구분한다.
이것을 위해 application.properties의 spring.profiles.active 값을 build.gradle에서 읽어 war 파일명에 넣어 해결한다.
1) build.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
// read application.properties values
import java.util.Properties
def props = new Properties()
file('src/main/resources/application.properties').withInputStream {
props.load(it)
}
def active = props['spring.profiles.active']
....
// war file name custom
version = '0.0.1-SNAPSHOT' +'-' + active
....
|
cs |
이렇게 함으로서 의도했던 내용을 모두 반영했다.
추가로, timestemp를 war 파일명에 넣기