我想运行一个Spring应用程序,该应用程序在完成其工作后应退出。但是在我的实现中,我得到了一个例外。
build.gradle 包含:
build.gradle
dependencies { compile("org.springframework.boot:spring-boot-starter-web") { exclude module: "spring-boot-starter-tomcat" } }
Application.java:
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)?
System.exit(0)
在您中Application.class您可以实现CommandLineRunner接口。
Application.class
CommandLineRunner
@SpringBootApplication public class Application implements CommandLineRunner{}
实现后,您需要实现一个void方法 run()
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); } }