본문 바로가기

프로젝트

[토이프로젝트] - 4. Spring Boot 멀티 모듈 yml 설정

1. 멀티 모듈 yml 설정

 

프로젝트 구조상 배포 실행되는 모듈은 scm_api, 도메인과 관련된 로직을 관리하는 모듈은 scm_domain입니다.

그렇기 때문에 main 클래스는 scm_api에 존재하게 되는데요.

앞서 말씀드렸다 싶이 main 클래스가 scm_api에 존재하기 때문에 환경 변수 등을 application.yml 파일에 등록하는 경우 scm_api의 resource에 있는 yml파일에 작성을 해야합니다.

 

하지만 scm_api에는 swagger와 같은 환경 변수가 필요하고, scm_domain에는 jpa와 같은 환경 변수가 필요하기 때문에 각각 분리해서 관리하는게 더 효율적이라고 생각했습니다.

 

@SpringBootApplication
@ComponentScan(basePackages = {"com.scm.api", "com.domain"})
public class ScmApplication {
    public static void main(String[] args) {
        System.setProperty("spring.config.name", "application, application-domain");
        new SpringApplicationBuilder(ScmApplication.class).run(args);
    }
}

 

System.setProperty를 추가해서 각 모듈에 존재하는 application.yml을 등록해서 분리해서 관리가 가능하게 됩니다.

 

좀 더 깔끔하게 적용하는 방법으로는 SpringApplicationBuilder에 scm_domain에서 사용할 application.yml을 properties로 등록해주는 방법이 있습니다.

 

@Configuration
public class DomainBasePackage {

    public static Map<String, Object> getSpringRunnerProperties() {
        Map<String, Object> additionalProperties = new HashMap<>();
        additionalProperties.put("spring.config.location", "classpath:/domain-config/,classpath:/");
        return additionalProperties;
    }

}

 

@SpringBootApplication
public class ScmApplication {
    public static void main(String[] args) {
        new SpringApplicationBuilder(ScmApplication.class)
                .properties(DomainBasePackage.getSpringRunnerProperties())
                .run(args);
    }
}

 

 

scm_domain의 패키지 경로 상에 DomainBasePackage를 설정파일로 선언합니다.

그리고 Map으로 spring.config.location이라는 key값으로 application.yml을 추가할 설정파일 경로를 value로 넣어줍니다.

 

domain 환경 설정 파일을 SpringApplicationBuilder의 properties를 추가해줌으로써 애플리케이션 실행시 scm_domain의 환경변수 값들을 추가해서 넣어줄 수 있습니다.

 

후자의 방법이 많은 모듈을 관리할때 효율적일것같다고 생각합니다.

 

감사합니다.

 


참조

https://devlog-wjdrbs96.tistory.com/435

 

[Spring] 멀티 모듈에서 모듈별 yml 파일 관리하는 법

Multi module에서 yml 파일 관리하는 법 이번 글에서는 Multi-Module을 사용할 때 모듈 별 yml 파일 관리하는 법에 대해서 정리해보려 합니다. api 모듈 application.yml domain 모듈 application.yml 만약에 위와 같이

devlog-wjdrbs96.tistory.com