스프링 설정파일(application.yml
, application.properties
)은 컴파일이 아닌 런타임 시점에 로드된다.
직접 테스트 해본 결과 아래와 같다.
설정파일이 올바르지 않으면 실행할 수 없는 애플리케이션이다.
참고로 설정파일은
app
외부의config/
디렉토리에 정의되어있다.
bootJar
생성 -> 성공bootJar
실행(java -jar ...
) -> 실패bootJar
실행(java -jar ...
) -> 성공따라서 실행 시점의 프로파일을 달리하고 싶으면 재빌드할 필요없이 아래와 같이 하면 된다.
./gradlew clean app:bootJar
java -jar -Dspring.profiles.active=DEV app.jar
java -jar -Dspring.profiles.active=LOCAL app.jar
config/
에 설정파일이 정의된 경우, 빌드 서버와 실행 서버가 다르다면 jar
파일 COPY
시에 설정파일도 함께 COPY
해야한다.
/config/application.yml
이 아닌, app/src/main/resources/applcation.yml
의 경우에는 어떨까
jar
파일 안에 함께 패키징 된다.jar
파일 외에 전부 삭제하고 실행해도 빌드 전의 application.yml
을 사용한다.profile
이 설정되어 있더라도 application-*.yml
을 전부 jar
에 패키징한다.하지만 설정파일이 jar
안에 함께 패키징된다 하더라도, 여전히 application.yml
을 불러오는 것은 런타임 시점이다. bootJar
후에 profile
을 바꿔가며 실행하면, 그에 맞는 설정파일이 로드된다.
번외)
app/src/main/resources/applcation.yml
은 컴파일 시에 jar
안에 함께 패키징되지만, 실행 시 config/application.yml
파일이 있다면 이로 덮어씌워진다.
config/application.yml
은 컴파일 시에 jar
안에 패키징되지 않는다.
해당 내용은 직접 테스트해보며 확인해본 것이나 잘못된 내용이 있을 수도 있습니다. 혹시나 잘못된 내용을 발견하셨을 경우, 알려주시면 정정하겠습니다.