【问题标题】:How to programmatically shutdown a Spring Application by itself on Tomcat如何在Tomcat上以编程方式自行关闭Spring应用程序
【发布时间】: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();
    }
}

感谢任何帮助。

【问题讨论】:

    标签: spring tomcat web-applications applicationcontext application-shutdown


    【解决方案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)。
    猜你喜欢
    • 2014-05-21
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 2014-11-28
    相关资源
    最近更新 更多