Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从运行在单个tomcat上的多个应用程序关闭spring boot应用程序

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

Stack Overflow用户
提问于 2019-11-04 10:17:04
回答 3查看 609关注 0票数 1

我想从运行在单个tomcat服务器上的多个应用程序中以编程方式关闭spring boot应用程序,而不是停止tomcat。

我在谷歌上搜索了几个解决方案,比如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
System.exit(0) 

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SpringbootApplication.exit()

导致关闭tomcat。我不想关掉tomcat。只是特定的应用程序。

我怎么能做到这一点..通过编程,有没有办法做到这一点。

请帮帮我!

EN

回答 3

Stack Overflow用户

发布于 2019-11-04 10:21:29

一种方法是使用执行器。

在您的pom中添加此依赖项

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

在yml / properties文件中添加这些属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
management.endpoint.shutdown.enabled=true
endpoints.shutdown.enabled=true
management.endpoints.web.exposure.include=*

准备就绪后,您可以点击此rest端点来关闭应用程序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://host:port/actuator/shutdown

这是POST调用。如果您在应用程序中使用了spring security,那么您可能需要做一些调整以允许这个端点通过。您可以使用curl调用post调用,如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -X POST http://host:port/actuator/shutdown
票数 2
EN

Stack Overflow用户

发布于 2019-11-04 10:20:28

您可以通过注册一个端点(尽管安全性很高)来实现这一点,您的应用程序可以向该端点发送关机请求,并且您可以像下面这样编写端点代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
         ConfigurableApplicationContext ctx = SpringApplication.run(YourApplicationClassName.class, args);
        int exitCode = SpringApplication.exit(ctx, new ExitCodeGenerator() {
            @Override
            public int getExitCode() {
                // no errors
                return 0;
            }
        });

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

票数 0
EN

Stack Overflow用户

发布于 2019-11-04 10:31:14

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SpringApplicationBuilder app = new SpringApplicationBuilder(Application.class)
  .web(WebApplicationType.NONE);
app.build().addListeners(new ApplicationPidFileWriter("./bin/shutdown.pid"));
app.run();

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kill $(cat ./bin/shutdown.pid)

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

ps:从here窃取。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58691312

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文