복붙노트

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

SPRING

스프링 부트 애플리케이션을 프로그래밍 방식으로 종료

VM을 종료하지 않고 스프링 부트 애플리케이션을 프로그래밍 방식으로 종료하려면 어떻게해야합니까?

다른 작품에서는, 그 반대는 무엇입니까?

new SpringApplication(Main.class).run(args);

해결법

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

    1.SpringApplication을 닫는 것은 기본적으로 기본 ApplicationContext를 닫음을 의미한다. SpringApplication # run (String ...) 메소드는 ApplicationContext를 ConfigurableApplicationContext로 제공한다. 그런 다음 자신을 닫을 수 있습니다. 예를 들어,

    SpringApplication을 닫는 것은 기본적으로 기본 ApplicationContext를 닫음을 의미한다. SpringApplication # run (String ...) 메소드는 ApplicationContext를 ConfigurableApplicationContext로 제공한다. 그런 다음 자신을 닫을 수 있습니다. 예를 들어,

    @SpringBootApplication
    public class Example {
        public static void main(String[] args) {
            ConfigurableApplicationContext ctx = SpringApplication.run(Example.class, args);
            // ...determine it's time to shut down...
            ctx.close();
        }
    }
    

    또는 정적 SpringApplication.exit (ApplicationContext, ExitCodeGenerator ...) 도우미 메서드를 사용하여 대신 수행 할 수 있습니다. 예를 들어,

    @SpringBootApplication
    public class Example {
        public static void main(String[] args) {
            ConfigurableApplicationContext ctx = SpringApplication.run(Example.class, args);
            // ...determine it's time to stop...
            int exitCode = SpringApplication.exit(ctx, new ExitCodeGenerator() {
                @Override
                public int getExitCode() {
                    // no errors
                    return 0;
                }
            });
            System.exit(exitCode);
        }
    }
    
  2. ==============================

    2.스프링 부트 응용 프로그램에서는 다음과 같은 것을 사용할 수 있습니다.

    스프링 부트 응용 프로그램에서는 다음과 같은 것을 사용할 수 있습니다.

    ShutdownManager.java

    import org.springframework.context.ApplicationContext;
    import org.springframework.boot.SpringApplication;
    
    @Component
    class ShutdownManager{
    
        @Autowired
        private ApplicationContext appContext;
    
        public void initiateShutdown(int returnCode){
            SpringApplication.exit(appContext, () -> returnCode);
        }
    }
    
  3. ==============================

    3.이 작품은 심지어 완료 인쇄됩니다.

    이 작품은 심지어 완료 인쇄됩니다.

      SpringApplication.run(MyApplication.class, args).close();
      System.out.println("done");
    

    그래서 run () 후에 .close ()

    설명:

    과:

    기본적으로 부모 컨텍스트를 닫지 않으므로 VM이 종료되지 않습니다.

  4. ==============================

    4.응용 프로그램에서 SpringApplication을 사용할 수 있습니다. 여기에는 두 개의 인수 (ApplicationContext 및 ExitCodeGenerator)를 사용하는 정적 exit () 메소드가 있습니다.

    응용 프로그램에서 SpringApplication을 사용할 수 있습니다. 여기에는 두 개의 인수 (ApplicationContext 및 ExitCodeGenerator)를 사용하는 정적 exit () 메소드가 있습니다.

    즉,이 메소드를 선언 할 수 있습니다.

    @Autowired
    public void shutDown(ExecutorServiceExitCodeGenerator exitCodeGenerator) {
        SpringApplication.exit(applicationContext, exitCodeGenerator);
    }
    

    통합 테스트에서는 클래스 수준에서 @DirtiesContext 주석을 추가하여 구현할 수 있습니다.

    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest(classes = {Application.class},
        webEnvironment= SpringBootTest.WebEnvironment.DEFINED_PORT, properties = {"server.port:0"})
    @DirtiesContext(classMode= DirtiesContext.ClassMode.AFTER_CLASS)
    public class ApplicationIT {
    ...
    
  5. from https://stackoverflow.com/questions/22944144/programmatically-shut-down-spring-boot-application by cc-by-sa and MIT license