Java Spring Boot:使独立应用程序运行而无需退出

时间:2019-01-10 06:00:35

标签: spring-boot

我正在创建独立的Spring Boot Java应用程序,其中处理了调度程序,数据库驱动的事件。 我使用的是Spring Boot 2.1.1,我希望我的独立Java应用程序在运行时不退出我的应用程序。 我不想依赖于操作系统特定的工具,例如nohup,javaw等。 我尝试使用spring-boot-web和嵌入式容器(tomcat / jetty),只是在执行main方法时使应用程序运行。 但是它增加了不必要的依赖关系,并粘在从中执行java -jar的控制台上。 spring或java提供了什么更好的方法?

1 个答案:

答案 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();
    };
}