본문 바로가기

spring

[Gradle]Multi Application.properties 사용하기

반응형

Application.properties ?

프로젝트에서 application.properties 파일은 주로 Spring Boot 애플리케이션의 구성(configuration)을 정의하는 데 사용됩니다. 이 파일은 Java의 Properties 파일 형식을 사용하여 키-값 쌍으로 구성되어 있으며, Spring Boot는 이 파일을 자동으로 로드하여 애플리케이션의 설정 정보로 사용합니다.

 

server.port=8080
server.servlet.context-path=/myapp

...

logging.level.root=WARN
logging.file.name=app.log

 

application.properties 파일은 일반적으로 src/main/resources 디렉토리 안에 위치하며, 이 위치는 Spring Boot가 구성 파일을 찾는 기본 경로입니다.

Spring Boot 애플리케이션을 실행할 때, 이 파일에 정의된 설정은 애플리케이션 컨텍스트를 초기화하는 데 사용되며, @Value 어노테이션, Environment 객체, @ConfigurationProperties 어노테이션 등을 통해 애플리케이션 내에서 접근할 수 있습니다.

 

What needed ?

같은 PHASE 안에서 application.properties 파일을 하나 더 로딩해야 했습니다.

Old application.properties에는 기본적인 값이 정의되어 있고 변경되어야 하는 값은 New application.properties에 정의해서 프로그램이 동작할 때 참고할 필요가 있었습니다.

 

Add new application.properties

Spring Boot 애플리케이션에서 application.properties와 application-local.properties를 동시에 로드하는 대신 application-local.properties만을 로드하려고 한다면, 기본적으로 Spring Boot는 application.properties를 기본 구성 파일로 사용하고, 추가적인 프로파일 구성(application-{profile}.properties)을 통해 해당 프로파일의 설정을 오버라이드합니다.

 

그러나 application.properties 파일을 완전히 무시하고 application-local.properties만을 로드하는 것은 Spring Boot의 기본 동작과 다릅니다. Spring Boot는 application.properties를 기본 구성 소스로 항상 사용하려고 시도합니다.

 

즉, application-local.properties를 LOAD하기 위해서는 default properties가 기본적으로 같이 load되어야 합니다.

 

저는 처음에 의도했던 건 default application.properties를 exclude하고 새로운 형식의 properties만 로드하고 싶었는데 load는 되었지만 @Value에서 값을 찾지는 못했습니다. 이유는 위와 같았습니다.

 

application.properties에 없는 키가 application-local.properties에만 있는 경우에도 Spring Boot 애플리케이션은 해당 키를 정상적으로 인식하고 사용할 수 있습니다.

Spring Boot는 활성화된 프로파일과 관련된 프로파일별 구성 파일(application-{profile}.properties 또는 application-{profile}.yml)을 로드하며, 이 파일들에 정의된 설정은 기본 application.properties 또는 application.yml 파일의 설정을 추가하거나 오버라이드할 수 있습니다.

 

RUN IT

프로파일을 활성화하는 방법은 다음과 같습니다

  • 애플리케이션 실행 시 JVM 시스템 속성으로 지정하기
java -jar -Dspring.profiles.active=local your-application.jar

 

만약 인텔리제이를 사용한다면 다음과 같이 설정을 할 수 있습니다.

  • application.properties 파일에서 기본 프로파일로 설정하기
spring.profiles.active=local

 

반응형