복붙노트

[SPRING] Spring의 application.properties에서 @Value 속성을 다시로드하는 방법은 무엇입니까? [복제]

SPRING

Spring의 application.properties에서 @Value 속성을 다시로드하는 방법은 무엇입니까? [복제]

나는 스프링 부트 응용 프로그램을 가지고있다. 실행 폴더 아래에 추가 구성 파일이 있습니다.

dir / config / application.properties

응용 프로그램이 시작되면 파일의 값을 사용하여 다음에 삽입합니다.

@Value("${my.property}")
private String prop;

질문 : @Value 속성을 다시로드하려면 어떻게해야합니까? 런타임 중에 application.properties 구성을 변경하고 @Value 필드를 업데이트 할 수 있기를 원합니다 (어쩌면 앱 내부에서 / reload 서블릿을 호출하여 해당 업데이트를 트리거 할 수 있습니다).

그러나 어떻게?

해결법

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

    1.아래 빈을 사용하여 config.properties를 1 초마다 다시로드하십시오.

    아래 빈을 사용하여 config.properties를 1 초마다 다시로드하십시오.

    @Component
    public class PropertyLoader {
    
        @Autowired
        private StandardEnvironment environment;
    
        @Scheduled(fixedRate=1000)
        public void reload() throws IOException {
            MutablePropertySources propertySources = environment.getPropertySources();
            PropertySource<?> resourcePropertySource = propertySources.get("class path resource [config.properties]");
            Properties properties = new Properties();
            InputStream inputStream = getClass().getResourceAsStream("/config.properties");
            properties.load(inputStream);
            inputStream.close();
            propertySources.replace("class path resource [config.properties]", new PropertiesPropertySource("class path resource [config.properties]", properties));
        }
    }
    

    기본 설정은 다음과 같습니다.

    @EnableScheduling
    @PropertySource("classpath:/config.properties")
    public class HelloWorldConfig {
    }
    

    @Value를 사용하는 대신 최신 속성을 사용하려고 할 때마다

    environment.get("my.property");
    
  2. from https://stackoverflow.com/questions/40287771/how-to-reload-a-value-property-from-application-properties-in-spring by cc-by-sa and MIT license