복붙노트

[SPRING] 런타임시 스프링 / 스프링 부트 속성 설정 / 무시

SPRING

런타임시 스프링 / 스프링 부트 속성 설정 / 무시

Spring Boot를 사용하는 프로젝트에서는 application.properties를 사용하지만 외부 구성을 기반으로 이러한 등록 정보 (예 : 로깅 수준의 포트 번호)를 구성해야합니다. API를 통해 구성에 액세스하므로 런타임에만 알 수 있습니다.

런타임시 (예를 들어 bean을 사용하여) 몇몇 Spring 프로퍼티를 오버라이드하거나 설정하는 방법이 있는가? 그렇다면 어떻게 될 수 있는가?

해결법

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

    1.Spring Cloud Config로 이것을 할 수있다.

    Spring Cloud Config로 이것을 할 수있다.

    일러스트레이션을 위해 런타임에 동적 속성 재정의를 볼 수있는 비교적 빠른 방법은 다음과 같습니다.

    첫째, bean이 변경된 프로퍼티를 선택할 수 있으려면, 당신은 그것의 주석을 주어야한다.

    @RefreshScope
    

    스프링 클라우드 의존성을 스프링 부트 앱에 추가하십시오 (예 : gradle).

    compile group: 'org.springframework.cloud', name: 'spring-cloud-starter', version: '1.1.1.RELEASE'
    

    (또한 스프링 부트 액츄에이터 의존성이 필요합니다.)

    앱을 실행하면 현재 설정을 예를 들어 볼 수 있습니다.

    http://localhost:8080/env
    

    예를 들어 application.properties에 'my.property'속성이 있으면 다음과 같은 내용이 표시됩니다.

    "applicationConfig: [classpath:/application.properties]": {
      "my.property": "value1",
      etc
    

    값을 변경하려면 application / x-www-form-urlencoded로 POST my.property = value2를 / env로 변경하십시오.

    curl -X POST http://localhost:8080 -d my.property=value2
    

    다시 GET / ENV하면 "manager"섹션 아래에 새 값이 표시됩니다.

    변경된 속성을 적용하려면 빈 POST를 / 새로 고침하십시오. 이제 귀하의 빈은 새로운 가치를 갖게 될 것입니다.

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

    2.변수를 전달하기 위해 시스템 속성을 사용할 수 있습니까? PropertyPlaceholderConfigurer를 구성하면 시스템 등록 정보 대 파일 등록 정보의 우선 순위를 설정할 수 있습니다.

    변수를 전달하기 위해 시스템 속성을 사용할 수 있습니까? PropertyPlaceholderConfigurer를 구성하면 시스템 등록 정보 대 파일 등록 정보의 우선 순위를 설정할 수 있습니다.

    예를 들면 다음과 같습니다.

    @Bean public PropertyPlaceholderConfigurer placeHolderConfigurer() {
        PropertyPlaceholderConfigurer props = new PropertyPlaceholderConfigurer()
        props.setSystemPropertiesMode( PropertyPlaceholderConfigurer.SYSTEM_PROPERTIES_MODE_OVERRIDE )
        props.setLocations(new 
    PathMatchingResourcePatternResolver().getResources("classpath:/**.properties"));
        props
    }
    

    위의 코드는 .properties 파일을로드하지만 우선 시스템 변수가되도록 우선 순위를 설정하므로 config에 동일한 변수를 덮어 쓸 시스템 변수를 설정하십시오.

    또는 문서를 살펴보면 환경에서 검색 순서를 정의 할 것을 권장합니다.

    바라건대 위의 하나가 당신이 필요로하는 것을 정리해야합니까?

  3. from https://stackoverflow.com/questions/27919270/set-override-spring-spring-boot-properties-at-runtime by cc-by-sa and MIT license