728x90
반응형

특정 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는 서버별로 분리되어야 한다. (아래 링크 참조)

 

spring boot profile 설정 파일을 분리해 봅시다.

 spring으로 crud 하기 전에, 필요한 지식들을 먼저 보고 가겠습니다. spring boot 프로젝트를 보면, 왠 properties 파일들을 보게 됩니다. 이들은, 셋팅 파일인데요. 환경에 따라서, 이 값을 다르게 하고

codingdog.tistory.com

 

1. Controller 활성화, 비활성화 : @ConditionalOnExpression

 

Can a spring boot @RestController be enabled/disabled using properties?

Given a "standard" spring boot application with a @RestController, eg @RestController @RequestMapping(value = "foo", produces = "application/json;charset=UTF-8") public class MyController { @

stackoverflow.com

 

내가 적용한 샘플은 아래와 같다.

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 파일명에 넣어 해결한다.

 

How to use spring properties in gradle.build?

How can I use properties configured in resources/application.properties in gradle.build? I would like to get something like this : flyway { url = MAP_WITH_PROPERTIES['spring.datasource.url'] ...

stackoverflow.com

 

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 파일명에 넣기

 

Add a time stamp to the JAR file name in Gradle

Java, gradle, jar

linuxtut.com

 

 

728x90
반응형

+ Recent posts