복붙노트

[SPRING] 스프링 부트 애플리케이션을 프로그래밍 방식으로 재시작

SPRING

스프링 부트 애플리케이션을 프로그래밍 방식으로 재시작

저는 Spring Boot를 사용하고 있습니다. 사용자가 여러 Bean 생성 중에 사용자의 업로드가 사용되기 때문에 응용 프로그램을 다시 시작해야하는 파일을 업로드 할 수있는 유스 케이스가 있습니다. 응용 프로그램을 다시 시작하지 않아도된다는 것을 알지만, 지금은 내가 원하는 것입니다.

Spring-Cloud 프로젝트에서 RestartEndpoint를 찾았지만 ApplicationPreparedEvent가 실행되지 않는 것 같습니다. 프로그래밍 방식으로 스프링 부트 응용 프로그램을 다시 시작할 수있는 다른 방법이 있습니까?

해결법

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

    1.Spring ApplicationContext에서 refresh () 메소드를 호출하여이를 수행하는 가장 간단한 방법. 이렇게하면 모든 빈을 죽이고 다시로드하므로 응용 프로그램이 안전하게 수행 할 수있는 경우에만 이것이 발생해야합니다.

    Spring ApplicationContext에서 refresh () 메소드를 호출하여이를 수행하는 가장 간단한 방법. 이렇게하면 모든 빈을 죽이고 다시로드하므로 응용 프로그램이 안전하게 수행 할 수있는 경우에만 이것이 발생해야합니다.

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

    2.나는 리눅스에서 동작하는 스프링 부트 애플리케이션이 루트 권한으로 실행되어야하는 특별한 경우가있다.

    나는 리눅스에서 동작하는 스프링 부트 애플리케이션이 루트 권한으로 실행되어야하는 특별한 경우가있다.

    응용 프로그램을 systemd 서비스로 실행하면 다음과 같이 다시 시작할 수 있습니다.

    Runtime.getRuntime().exec(new String[] { "/bin/systemctl", "restart", "foo" });
    

    응용 프로그램이 (잘하면) 루트 권한으로 실행하지 않아도된다면 setuid 래퍼 스크립트를 사용하거나 더 나은 방법으로 sudo를 사용할 수 있습니다.

    그것을하는 방법에 대한 답변을 확인하십시오 :

    https://superuser.com/questions/440363/can-i-make-a-script-always-execute-as-root

  3. ==============================

    3.귀하의 경우에는 / 새로 고침 끝점 (http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html#_endpoints 참조)을 사용하고 변경된 내용에 의존하는 bean에 주석을 달 수 있습니다 @RefreshScope를 사용한 구성.

    귀하의 경우에는 / 새로 고침 끝점 (http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html#_endpoints 참조)을 사용하고 변경된 내용에 의존하는 bean에 주석을 달 수 있습니다 @RefreshScope를 사용한 구성.

  4. from https://stackoverflow.com/questions/29117308/programmatically-restart-spring-boot-application by cc-by-sa and MIT license