source

spring-boot을 사용하여 라이브러리의 기본 속성 설정

manysource 2023. 6. 19. 21:41

spring-boot을 사용하여 라이브러리의 기본 속성 설정

저는 스프링부츠를 이용한 다양한 서비스를 가지고 있습니다.각 서비스에 대해 공통적인 구성을 설정하지만 서비스가 원하는 경우 해당 속성을 사용하여 재정의할 수 있도록 허용합니다.특성의 예로는 스프링이 있습니다.show_filename, management urlone 등.

어떻게 해야 하나요?다음이 있는 경우:

  • service-common과 src/main/syslog/application.yml 및 기본 속성
  • service1(src/main/syslog/application.yml 및 자체 속성 포함)

우선 service1 버전과 병합했으면 합니다.대신 클래스 경로에서 발견된 첫 번째 것만 사용되는 것 같습니다.

(또는 @Configuration 클래스를 사용하는 것이 훨씬 더 좋겠지만 많은 속성을 정의하는 데 사용할 수 있을지 모르겠습니다.)

속성 소스가 고려되는 순서에 따라 여러 가지 옵션을 사용할 수 있습니다.

공용 라이브러리가 다음을 만드는 책임이 있는 경우SpringApplication사용할 수 있습니다.setDefaultProperties이러한 값은 서비스에 의해 재정의될 수 있습니다.application.properties.

또는 라이브러리에서 다음을 사용할 수 있습니다.@PropertySource그 중 하나에@Configuration구성할 클래스(예:library.properties출처로서다시 말하지만, 이러한 속성은 서비스에서 재정의될 수 있습니다.application.properties.

나는 그것들을 병합하는 것이 무슨 뜻인지 잘 모르겠습니다.

하지만 결국에는 프로파일별 구성을 사용하는 상황을 설명하는 것이라고 생각합니다.특정 서비스에 특정한 속성은 Spring 프로파일을 사용하여 관리/주입할 수 있기 때문에 항상 기본 속성 파일보다 우선합니다(설명서 참조).

예를 들어, 당신은 그 파일을 가질 수 있습니다.application-service1.properties속성으로 앱을 실행할 때 자동으로 사용됩니다.spring.profiles.active=service1명령행 및 기타 위치에서 지정할 수 있습니다.이 속성을 지정하지 않으면 Spring Boot이 기본값으로 폴백됩니다.application.properties파일.

물론 두 파일 모두에 공통 속성을 기록할 수 있습니다.

application.properties:

service.url=http://localhost:8080/endpoint
service.user=admin
service.password=admin

application-service1.properties:

service.url=http://api.service.com/endpoint
service.user=admin
service.password=aosdnoni3
public class MyApplicationListener implements ApplicationListener<ApplicationEvent> {
    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        if (event instanceof ApplicationEnvironmentPreparedEvent) {
            ApplicationEnvironmentPreparedEvent envEvent = (ApplicationEnvironmentPreparedEvent) event;
            ConfigurableEnvironment env = envEvent.getEnvironment();
            Properties props = new Properties();
            //set props as desired
            env.getPropertySources()
                    .addFirst(new PropertiesPropertySource("customname", props));
    }
}

그런 다음 src/main/resources/METa-INF/spring.factory에서 다음 행을 추가합니다.org.springframework.context.ApplicationListener=mypackage.MyApplicationListener

언급URL : https://stackoverflow.com/questions/28892948/set-default-properties-in-a-library-with-spring-boot