복붙노트

[SPRING] Spring에서 application.properties를 상속받는 방법?

SPRING

Spring에서 application.properties를 상속받는 방법?

일반적인 구성을 정의하는 application.properties를 갖는 commons 라이브러리를 만들면. 처럼:

spring.main.banner-mode = off

이러한 공용 라이브러리를 포함하는 다른 프로젝트에 이러한 속성을 상속하려면 어떻게해야합니까?

메이븐 :

<project ...>
    <groupId>de.mydomain</groupId>
    <artifactId>my-core</artifactId>
    <version>1.0.0</version>

    <dependencies>
        <dependency>
            <!-- this one holds the common application.properties -->
            <groupId>my.domain</groupId>
            <artifactId>my-commons</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>
</project>

내 커먼에서 내 코어로 구성을 상속하려면 어떻게해야합니까?

해결법

  1. ==============================

    1.해결 방법은 공유 속성을 다른 이름 (여기서는 application-shared.properties)을 사용하여 포함하는 것입니다.

    해결 방법은 공유 속성을 다른 이름 (여기서는 application-shared.properties)을 사용하여 포함하는 것입니다.

    공유 라이브러리에서 :

    @SpringBootApplication
    @PropertySource(ResourceUtils.CLASSPATH_URL_PREFIX + "application-shared.properties") //can be overridden by application.properties
    public class SharedAutoConfiguration {
    }
    

    기본 앱 :

    @SpringBootApplication
    @Import(SharedAutoConfiguration.class)
    public class MainAppConfiguration extends SpringBootServletInitializer {
    
    }
    

    이렇게하면 공유 / 공유 설정이로드되지만 주 앱의 application.properties에서 재정의 할 수는 있습니다.

    이유는 모르겠지만 spring.main.banner-mode 속성에서는 작동하지 않지만 다른 모든 속성에서는 제대로 작동합니다.

  2. ==============================

    2.이것을 스프링으로 시도 할 수 있습니다.

    이것을 스프링으로 시도 할 수 있습니다.

    src / main / resources / application.properties를 언급 한대로 공통 모듈에 정의 할 수 있습니다. 그것은 그것에 의존하는 다른 프로젝트를위한 classpath에 존재할 것입니다.

    그런 다음 공통 모듈에 의존하는 다른 프로젝트에서 @PropertySource Annotation을 사용합니다.

    @Configuration
    @PropertySource("classpath*:META-INF/spring/properties/*.properties")
    public class Config {
      ...
    }
    

    또는 XML 구성 :

    <context:property-placeholder location="classpath*:META-INF/spring/properties/*.properties"/>
    

    클래스 경로 지정 디렉토리에있는 모든 구성 파일을 가져와야합니다.

    또한 classpath에 두 개의 동일한 파일을 가질 수 없다는 것을 알아야합니다. 당신은 갈등을 겪을 것입니다.

    예를 들어,이 상황은 충돌을 발생시킵니다.

    프로젝트 A (프로젝트 B에 따라 다름) :

    프로젝트 B :

    application.properties 파일의 이름을 바꾸거나 다른 디렉토리에 넣어야합니다.

  3. from https://stackoverflow.com/questions/44718763/how-to-inherit-application-properties-in-spring by cc-by-sa and MIT license