当前位置: 首页 > 知识库问答 >
问题:

如何防止Spring启动守护程序/服务器应用程序立即关闭/关闭?

柯昆
2023-03-14

我的Spring Boot应用程序不是Web服务器,但它是使用自定义协议的服务器(在本例中使用Camel)。

但是Spring Boot在启动后立即(优雅地)停止。我如何防止这种情况?

我希望应用程序停止,如果Ctrl C或编程

@CompileStatic
@Configuration
class CamelConfig {

    @Bean
    CamelContextFactoryBean camelContext() {
        final camelContextFactory = new CamelContextFactoryBean()
        camelContextFactory.id = 'camelContext'
        camelContextFactory
    }

}

共有3个答案

萧星火
2023-03-14

使用倒计时锁存器的示例实现:

@Bean
public CountDownLatch closeLatch() {
    return new CountDownLatch(1);
}

public static void main(String... args) throws InterruptedException {
    ApplicationContext ctx = SpringApplication.run(MyApp.class, args);  

    final CountDownLatch closeLatch = ctx.getBean(CountDownLatch.class);
    Runtime.getRuntime().addShutdownHook(new Thread() {
        @Override
        public void run() {
            closeLatch.countDown();
        }
    });
    closeLatch.await();
}

现在,要停止应用程序,可以查找进程ID并从控制台发出kill命令:

kill <PID>
吴鸿彩
2023-03-14

对于ApacheCamel 2.17,有一个更清晰的答案。引用http://camel.apache.org/spring-boot.html:

要保持主线程阻塞,以便Camel保持正常运行,要么包括sping-boo-starter-web依赖项,要么在application.properties或application.yml文件中添加camel.springboot.main-run-Controlers=true。

您也需要以下依赖项:

清楚地替换

苏凯
2023-03-14

我用org找到了解决方案。springframework。靴子CommandLineRunner线程。currentThread()。join(),例如:(注意:下面的代码是Groovy,不是Java)

package id.ac.itb.lumen.social

import org.slf4j.LoggerFactory
import org.springframework.boot.CommandLineRunner
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication

@SpringBootApplication
class LumenSocialApplication implements CommandLineRunner {

    private static final log = LoggerFactory.getLogger(LumenSocialApplication.class)

    static void main(String[] args) {
        SpringApplication.run LumenSocialApplication, args
    }

    @Override
    void run(String... args) throws Exception {
        log.info('Joining thread, you can press Ctrl+C to shutdown application')
        Thread.currentThread().join()
    }
}
 类似资料:
  • 问题内容: 我的Spring Boot应用程序不是Web服务器,而是使用自定义协议的服务器(在这种情况下使用Camel)。 但是Spring Boot在启动后立即(优美地)停止。我该如何预防? 我希望该应用程序按Ctrl + C或以编程方式停止。 问题答案: 从Apache Camel 2.17开始,有一个更干净的答案。引用http://camel.apache.org/spring- boot.

  • 我在kubernetes集群上尝试使用Helm Chart进行spring boot微服务部署。但我注意到一个奇怪的问题,我的spring boot应用程序启动后却立即关闭 这是我的头盔模板-

  • 我有一个Spring启动应用程序。 我已经在我的bean中实现了接口,它在它的方法中启动异步snmp服务器,并在它的方法中停止它。 除了主应用程序上下文在启动后立即停止,所以我的服务器bean也在启动后立即停止之外,所有这些都可以正常工作。 我只需要让spring上下文仅在启动shutdown hook时停止。 这不是一个web应用程序,所以我不需要,它通过启动webserver来解决这个问题,w

  • 我有一个主(屏幕)gui窗口,需要打开几个“多输入”窗口(jdialog或当不可能使用jframe时),例如添加首选项(4个文本字段,带有2个文件选择器和2个单选按钮)。在这些JDialogs(或JFrames)中按OK/Cancel时,我的整个应用程序将关闭。我不想那样。我该怎么防止呢? 第一次尝试:我尝试了intelliJ选项“新- 第二次尝试:我“手工”编写了一个类,创建了一个JDialog