我正在创建独立的Spring Boot Java应用程序,其中处理了调度程序,数据库驱动的事件。 我使用的是Spring Boot 2.1.1,我希望我的独立Java应用程序在运行时不退出我的应用程序。 我不想依赖于操作系统特定的工具,例如nohup,javaw等。 我尝试使用spring-boot-web和嵌入式容器(tomcat / jetty),只是在执行main方法时使应用程序运行。 但是它增加了不必要的依赖关系,并粘在从中执行java -jar的控制台上。 spring或java提供了什么更好的方法?
答案 0 :(得分:0)
当最后一个非守护线程退出时,应用程序将退出。这是关闭应用程序上下文的时间。如果您自己创建一个非守护线程,则可以防止该线程等待以编程方式关闭上下文(例如,通过信号ctrl + c)。
@Bean
public DisposableBean contextShutdownGate(ApplicationContext context) {
CountDownLatch latch = new CountDownLatch(1);
Thread await = new Thread(new Runnable() {
@Override
public void run() {
try {
latch.await();
} catch (InterruptedException e) {
LOGGER.error("contextAwait interrupted", e);
}
}
}, "contextAwait-" + context.getId() + "-" + context.getStartupDate());
await.setDaemon(false);
await.start();
return () -> {
latch.countDown();
};
}