如何在Tomcat上以编程方式自行关闭Spring应用程序

Posted

技术标签:

【中文标题】如何在Tomcat上以编程方式自行关闭Spring应用程序【英文标题】:How to programmatically shutdown a Spring Application by itself on Tomcat 【发布时间】:2017-04-11 06:46:15 【问题描述】:

我们如何以编程方式自行关闭或停止 Spring 应用程序?

我们目前正在使用ConfigurableApplicationContext#close(),是的,它会关闭应用程序,但不会关闭或停止应用程序。

从tomcat管理器来看,应用状态依然是running,所以客户端还是可以连接到web app,获取前端资源。此外,所有 servlet 似乎仍在工作并且可以接受请求。

下面的代码展示了我们目前的做法。

@Autowired
private ConfigurableApplicationContext configurableApplicationContext;

@Scheduled(cron="0 0/5 * * * ?")
private void validateLicenseExpired()

    try
    
        LicenseUtils.isLicensingPeriodValid();
     catch (LicenseInvalidException lie) 
        logger.error("\t The licensing is expired", lie);
        configurableApplicationContext.close();
    

感谢任何帮助。

【问题讨论】:

【参考方案1】:

如果它是一个启动应用程序,您可以使用以下链接停止该应用程序。

Programmatically shut down Spring Boot application

否则,您可以像下面这样以编程方式调用 shutdown.sh 来停止服务器。

String command = "<path-to-tomcat>shutdown.sh"; // for windows use bat
Process child = Runtime.getRuntime().exec(command);

[编辑]

这个帖子解释了停止像tomcat管理器这样的应用程序

Start / stop a web application from itself?

【讨论】:

您好 Avinash,感谢您的回复。我们目前没有为我们的项目使用 spring-boot。但是,您提供的链接看起来使用与 ConfigurableApplicationContext.html#close() 相同的方式?而且我们不能只关闭运行多个应用程序的容器(tomcat)。

以上是关于如何在Tomcat上以编程方式自行关闭Spring应用程序的主要内容,如果未能解决你的问题,请参考以下文章

在android上以编程方式打开/关闭大写锁定和shift键

在 Android 上以编程方式关闭应用程序的通知

如何在Android上以编程方式启用或禁用GPS?

如何在Android 6.x上以编程方式启用或禁用GPS?

在 UITextView 上以编程方式禁用 iOS8 Quicktype 键盘

如何在 Android 上以编程方式截取屏幕截图? [复制]