제목: "[Spring boot 에서 gradle 에 정의되어있는 정보 가져오기]"
작성자: github.io(nevercaution)
작성자 수정일: 2018년05월20일
링크: https://nevercaution.github.io/spring-boot-use-gradle-value/
작성일: 2022년7월4일
build.gradle
ext {
appVersion = '1.0.0-SNAPSHOT'
projectName = "backend-business"
}
발생할 장애 알림은 SLACK을 사용하는데, 어떤 에러가 발생했을 때 현재 배포되어 있는 버전을 함께 표시해주면 해당 에러가 어떤 버전에서 최초 발생했는지 추적이 가능하다.
공식문서 부분을 참고해서 작성하였다.
build.gradle
에 정의되어있는 값들을 사용하기 위해선 다음과 같이 설정해주면 된다.SimpleTemplateEngine
에서는 $
를 파싱하는 부분에서 충돌이 발생할 수 있어 별도의 처리를 해야 한다고 명시되어 있다.expand(project.properties)
만 하게 되면 모든 설정 파일을 가져가게 된다.$
를 사용했다면 파싱을 하다가 깨질 수 있으니 escape
처리를 해주어야 하는데, 현재 상황은 내가 필요한 설정 파일만 가져가면 되기 때문에 내가 원하는 파일들만 expand
하도록 하자. processResources
에서 작업이 멈춘다.:processResources FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':processResources'.
> Could not copy file '/path/to/file/error.ftl' to '/path/to/file/build/resources/main/error.ftl'.
filesMatching
로 원하는 파일 포멧만 하도록 감싸주자. (실제 이 부분에서 적용하다가 에러를 발생해서 모든 $
에 escape
처리를 할까 하다가 그건 좀 아닌것 같아 아래와 같이 처리했다.)
build.gradle
processResources {
filesMatching('**/application-common.yml') {
expand(project.properties)
}
}
application.yml
ext.appVersion: ${ext.appVersion}
ext.projectName: ${ext.projectName}
EntityVersionListener
@Component
public class EntityVersionListener {
@Value("${ext.appVersion}")
private String appVersion;
@PrePersist
public void prePersist(BaseEntity baseEntity) {
baseEntity.setVersion(appVersion);
}
@PreUpdate
public void preUpdate(BaseEntity baseEntity) {
baseEntity.setVersion(appVersion);
}
}
build.gradle
에서 명시해준 expand(project.properties)
의 동작인데 build
를 하게 되면 다음의 동작을 수행한다.$ ./build
Executing task 'build'...
:bootBuildInfo
:compileJava
:processResources <- here!
:classes
:bootJar
:jar SKIPPED
:assemble
:compileTestJava
:processTestResources NO-SOURCE
:testClasses
:test
:check
:build
application-common.yml
에 명시되어 있는 ext
관련 값들을 매핑시켜줄때 gradle
에 명시되어 있는 값들로 채워준다.build/resources/main/application.yml
파일을 보면 매핑된 값들로 채워져 있는 것을 볼 수 있다.application.yml
ext.appVersion: 1.0.1-SNAPSHOT
ext.projectName: backend-business
위에서 작성한 코드가 위와 같이 바뀌어 있음을 확인할 수 있다.