본문 바로가기
[IT] Spring Boot (JAVA)

[JAVA Spring Boot] spring.config.import 사용하여 외부 프로퍼티 컨피그 파일 적용

by 오리엔탈킴 2022. 9. 28.

안녕하세요, 오늘은 Spring Boot의 외부에 있는 프로퍼티(Property) 컨피그 파일을 적용하는 여러 가지 방법 중, 주관적인 생각으로 가장 간단하다고 생각되는 spring.config.import 프로퍼티를 이용하는 방법을 정리해보도록 하겠습니다.

Spring Boot 프로젝트를 생성하면 default로 classpathsrc/main/resources에 있는 application.properties 파일이나 application.yml 파일, 혹은 application-{profile명}.properties 이나 application-{profile명}.yml을 기본 컨피그 프로퍼티 파일로 자동으로 인식하여 실행이 됩니다.

그 외 다양한 방법으로 외부 컨피그를 설정할 수 있는 방법이 있는데요, 전체 방법과 우선순위는 아래 공식 가이드를 참고하세요.

https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config.files

 

이 중에서 제가 생각했을 때 가장 심플하다고 생각이 되는 spring.config.import를 이용하여 Spring boot 외부의 컨피그 프로퍼티 파일을 적용하는 방법을 정리하겠습니다. (yml 파일을 기준으로 정리를 하겠습니다.)

 

application.yml 파일에 spring.config.import 추가

우선 간단하게 테스트를 위해 아래 starter-web을 디펜던시로 갖는 spring boot 프로젝트를 생성하였습니다.

implementation 'org.springframework.boot:spring-boot-starter-web'

 

application.yml

spring:
  config:
    import: file:D:\/dev\/testconf2.yml

그 후, 위와 같이 Spring boot의 기본 컨피그 파일인 src/main/resources 경로의 application.yml 혹은 application-{profile}.yml 파일에 spring.config.import를 추가하고 외부 컨피그 파일의 경로를 file:{경로} 형태로 작성합니다. Window를 기준으로 작성을 하였고, 리눅스나 맥의 경우에도 파일이 있는 경로를 동일하게 "file:/data/testconf2.yml"과 같이 작성합니다.

testconf2.yml

testconf2.yml 파일은 D:\dev 경로에 아래와 같이 테스트를 위해 port를 8082로 하고 conftest.test2라는 텍스트 데이터를 한개 생성해줍니다.

server:
 port: 8082

conftest:
  text2: "컨피그2"

DemoComp.java

그리고, 테스트를 위해 위에서 설정한 텍스트를 불러오는 자바파일을 한 개 간단히 작성하고 실행을 하면, 아래와 같이 스프링 부트의 디폴트 포트인 8080이 아닌 testconf2.yml에 설정한 8082 포트로 실행이 되고, 설정한 텍스트 데이터도 잘 출력되는 것을 확인할 수 있습니다.

@Component
public class DemoComp {

    @Value("${conftest.text2}")
	private String testText2;

    @Bean
    public void demoTestMethod(){
        System.out.println(testText2);
    }
}

테스트 결과

 

spring.config.import 여러 컨피그 파일 적용

application.yml

아래와 같이 application.yml 파일에 리스트 형태로 여러 컨피그 파일을 import 하도록 설정할 수 있습니다.

spring:
  config:
    import:
    - classpath:testconf.yml
    - file:D:\/dev\/testconf2.yml
    - http://localhost:5500/testconf3.yml
    - optional:classpath:testconf4.yml # 없는 파일
  • classpath:testconf.yml : Spring Boot 프로젝트 내 calsspath에 application.yml 등 Default가 아닌 다른 파일명을 사용할 경우
  • file:D:\/dev\/testconf2.yml : Spring Boot 실행 파일 외 서버나 PC의 외부 컨피그 파일을 Import 할 경우
  • http://localhost:5500/testconf3.yml : http url 형태로 인터넷 상 컨피그 파일 Import 할 경우
  • optional:classpath:testconf4.yml : 파일이 존재하지 않아도 실행에 문제가 없도록 하기 위해서는 optional이라는 prefix를 추가

 

테스트를 위해 아래와 같이 작성을 하고, 실행을 해보면 3개의 컨피그 파일에 있는 데이터가 모두 정상적으로 Read가 되고, 같은 프로퍼티의 경우 오버라이드되어 마지막 컨피그 파일이 적용이 되어 8083 포트로 실행되는 것을 확인할 수 있습니다.

testconf.yml

server:
  port: 8081

conftest:
  text1: "컨피그1"

testconf3.yml

server:
  port: 8083

conftest:
  text3: "컨피그3"

demo.java

@Component
public class DemoComp {
    @Value("${conftest.text1}")
	private String testText1;

    @Value("${conftest.text2}")
	private String testText2;

    @Value("${conftest.text3}")
	private String testText3;

    @Bean
    public void demoTestMethod(){
        System.out.println(testText1);
        System.out.println(testText2);
        System.out.println(testText3);
    }
}

테스트 결과2
가장 마지막 컨피그인 8083 포트로 적용 및 3개의 파일 컨피그 모두 적용

 

 

반응형

댓글