복붙노트

[SPRING] Spring-Boot에서 production.properties를 오버라이드하는 법?

SPRING

Spring-Boot에서 production.properties를 오버라이드하는 법?

나는 @Configuration @Profile ( "dev")에 의해 개발 중에 데이터베이스를 선택하기 위해 spring 부트와 application.properties를 사용하고있다.

spring.profiles.active=dev
spring.config.location=file:d:/application.properties

제작하는 동안 응용 프로그램 컨텍스트 외부에서로드해야하는 파일을 만들고 d : /application.properties와 함께 다른 구성 프로필을 활성화해야합니다.

spring.profiles.active=production

결과 : 앱을 시작할 때 구성이 여전히 dev이므로 생산적 속성 파일의 추가 위치가 고려되지 않습니다. 내가 놓친 게 있니?

봄 부츠 1.1.0.BUILD-SNAPSHOT

참고 :이 질문은 바람둥이에 관한 것이 아닙니다.

해결법

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

    1.어떻게하는지 물어 봤어.

    어떻게하는지 물어 봤어.

    그러나 대답은, 당신이 이것을해서는 안된다는 것입니다.

    application.properties application-default.properties application-dev.properties 등을 가질 수 있습니다.

    당신은 jvm에 명령 행 인자로 프로파일을 바꿀 수있다.

    @TestPropertySource를 사용하여 테스트 할 때 몇 가지를 재정의 할 수 있습니다.

    모든 것이 소스 컨트롤에 있어야 이상적인 것이 없습니다. 서버 위치에 어떤 속성이 있는지, 어떤 속성이 누락되었는지는 어떻게 알 수 있습니까? 개발자가 새로운 것을 도입하면 어떻게 될 것인가.

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

    봄철 부츠는 이미 이런 일을 할 수있는 충분한 방법을 제공하고 있습니다.

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

    2.@PropertySources를 사용할 수도 있습니다.

    @PropertySources를 사용할 수도 있습니다.

    @PropertySources({
            @PropertySource(value = "classpath:application.properties"),
            @PropertySource(value = "file:/user/home/external.properties", ignoreResourceNotFound = true)
    })
    public class Application {
        public static void main(String[] args) throws Exception {
            ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);
    
        }
    
    
    }
    
  3. ==============================

    3.프로필을 동적으로 변경할 수 있는지 잘 모르겠습니다.

    프로필을 동적으로 변경할 수 있는지 잘 모르겠습니다.

    spring.config.location 속성이 원하는 외부 위치로 설정된 내부 속성 파일을 갖고 있지 않고 그 위치 (jar 외부)의 속성 파일에 spring.profiles.active 속성이 설정되어 있습니까?

    더 나은 것은, dev 프로필 (spring.profiles.active = dev)에 고유 한 내부 속성 파일을 가지고 있고, 그대로 유지하고, 프로덕션 환경에 배포하려면 스프링이있는 속성 파일의 새 위치를 지정하십시오 .profiles.active = prod :

    java -jar myjar.jar --spring.config.location=D:\wherever\application.properties
    
  4. ==============================

    4.최신 정보: 이것은 봄에 볼 수있는 버그입니다.

    최신 정보: 이것은 봄에 볼 수있는 버그입니다.

    항아리 외부의 응용 프로그램 속성은 다음 위치 중 하나에 있어야하며 모든 것이 작동해야합니다.

    21.2 Application property files
    SpringApplication will load properties from application.properties files in the following    locations and add them to the Spring Environment:
    
    A /config subdir of the current directory.
    The current directory
    A classpath /config package
    The classpath root
    

    예. 이것은 cmd line args를 지정하고 싶지 않고 기본 app.props에서 spring.config.location을 사용하지 않을 때 작동합니다.

    d:\yourExecutable.jar
    d:\application.properties
    
    or
    
    d:\yourExecutable.jar
    d:\config\application.properties
    

    스프링 외부 설정 문서를 참조하십시오.

    최신 정보: \ @Configuration을 \ @PropertySource와 함께 사용할 수 있습니다. 여기에있는 문서에 따르면 어디서나 자원을 지정할 수 있습니다. 당신은 조심해야한다. 당신의 프로덕션 중 하나가 승리하도록하기 위해 어떤 설정이로드되는지.

  5. ==============================

    5.나는 다음이 나를 위해 일했다는 것을 발견했다.

    나는 다음이 나를 위해 일했다는 것을 발견했다.

    java -jar my-awesome-java-prog.jar --spring.config.location=file:/path-to-config-dir/
    

    파일 : 추가됨.

    후기 수정

    물론이 명령 줄은 프로덕션 환경 에서처럼 실행되지 않습니다.

    오히려 나는 가지고있다.

  6. ==============================

    6.스프링 구성 우선 순위는 다음과 같습니다.

    스프링 구성 우선 순위는 다음과 같습니다.

    그렇게하기 원하면 명령 행에서 설정을 덮어 씁니다. 그러나 여러 프로파일을 사용할 수는 있지만 오버라이드를 피하는 것이 좋습니다.

  7. from https://stackoverflow.com/questions/23563363/how-to-override-application-properties-during-production-in-spring-boot by cc-by-sa and MIT license