복붙노트

[SPRING] 스프링 부트 : 응용 프로그램을 종료하는 동안의 예외

SPRING

스프링 부트 : 응용 프로그램을 종료하는 동안의 예외

나는 그 일을 마친 후에 종료해야하는 Spring 애플리케이션을 실행하고 싶다. 그러나 내 구현에서는 예외가 발생합니다.

build.gradle에 포함 된 항목 :

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web") {
        exclude module: "spring-boot-starter-tomcat"
    }
}

Application.java:

@SpringBootApplication
public class Application {

    @Autowired
    private ApplicationContext context;

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @PostConstruct
    public void doTheWorkAndExit() {
        // do the work ...
        SpringApplication.exit(context, () -> 0);
    }

}

나는 예외를 얻는다.

Exception thrown from LifecycleProcessor on context close

java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via the context: org.springframework.context.annotation.AnnotationConfigAppl
icationContext@1807f5a7: startup date [Fri Mar 11 10:03:27 CET 2016]; root of context hierarchy
    at org.springframework.context.support.AbstractApplicationContext.getLifecycleProcessor(AbstractApplicationContext.java:415)
    at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:975)
    at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:934)
    at org.springframework.boot.SpringApplication.close(SpringApplication.java:1252)
    at org.springframework.boot.SpringApplication.exit(SpringApplication.java:1238)
    at mypackage.Application.doTheWorkAndExit(Application.java:34)
    ...

내가 무엇을 할 수 있을지? System.exit (0)을 사용하는 것보다 나은 해결책이 있습니까?

해결법

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

    1.Application.class에서 CommandLineRunner 인터페이스를 구현할 수 있습니다.

    Application.class에서 CommandLineRunner 인터페이스를 구현할 수 있습니다.

    @SpringBootApplication
    public class Application implements CommandLineRunner{}
    

    구현 후에 void 메쏘드 run ()을 구현할 필요가있다.

    @Override
    public void run(String... strings) {
        //here starts your code (like in a normal main method in a java application)
    }
    

    모든 코드를 실행 한 후 응용 프로그램이 종료됩니다.

    완전한 Application.class :

    @SpringBootApplication
    public class Application implements CommandLineRunner{
    
      @Override
      public void run(String... strings) {
          //here your code...
      }
    
      public static void main(String[] args) throws Exception {
          SpringApplication.run(Application.class, args);    
      }
    }
    
  2. from https://stackoverflow.com/questions/35936125/spring-boot-exception-while-exiting-application by cc-by-sa and MIT license