为了账号安全,请及时绑定邮箱和手机立即绑定

从单个 tomcat 上运行的多个应用程序关闭 spring boot 应用程序

从单个 tomcat 上运行的多个应用程序关闭 spring boot 应用程序

慕尼黑的夜晚无繁华 2024-01-28 17:23:28
我想以编程方式从单个 tomcat 服务器上运行的多个应用程序关闭 spring boot 应用程序,而不停止 tomcat。我在谷歌上搜索发现了几个解决方案,例如System.exit(0)和SpringbootApplication.exit()导致关闭tomcat。我不想关闭tomcat。只是特定的应用程序。我该怎么做......以编程方式有什么办法可以做到这一点。请帮忙!
查看完整描述

3 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

一种方法是使用执行器。


在您的 pom 中添加此依赖项


<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

将这些属性添加到您的 yml / 属性文件中


management.endpoint.shutdown.enabled=true

endpoints.shutdown.enabled=true

management.endpoints.web.exposure.include=*

完成此操作后,您可以点击此休息端点来关闭应用程序


http://host:port/actuator/shutdown

这是一个POST调用。如果您在应用程序中使用 Spring Security,那么您可能需要进行一些调整以允许此端点通过。您可以使用curl来调用post调用,例如


curl -X POST http://host:port/actuator/shutdown


查看完整回答
反对 回复 2024-01-28
?
噜噜哒

TA贡献1784条经验 获得超7个赞

您可以通过注册一个端点(尽管高度安全)来做到这一点,您的应用程序可以向该端点发送关闭请求,并且您可以对端点进行编码,如下所示:


         ConfigurableApplicationContext ctx = SpringApplication.run(YourApplicationClassName.class, args);

        int exitCode = SpringApplication.exit(ctx, new ExitCodeGenerator() {

            @Override

            public int getExitCode() {

                // no errors

                return 0;

            }

        });

安全性 - 我建议,如果您想通过其他应用程序向应用程序发送终止信号,您可以使用应用程序令牌来唯一标识有权关闭您的应用程序的应用程序。


查看完整回答
反对 回复 2024-01-28
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

一种方法是终止应用程序进程。


首先,应用程序必须将其 PID 写入文件 (shutdown.pid):


SpringApplicationBuilder app = new SpringApplicationBuilder(Application.class)

  .web(WebApplicationType.NONE);

app.build().addListeners(new ApplicationPidFileWriter("./bin/shutdown.pid"));

app.run();

然后您可以创建一个文件(shutdown.bat)并添加以下行:


kill $(cat ./bin/shutdown.pid)

shutdown.bat 的执行从 shutdown.pid 文件中提取进程 ID,并使用kill 命令终止启动应用程序。


ps:从这里偷来的。



查看完整回答
反对 回复 2024-01-28
  • 3 回答
  • 0 关注
  • 34 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信