首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在cloudfoundry上部署应用程序时,spring-boot web应用程序的ContextClosedEvent无法完成

在cloudfoundry上部署应用程序时,spring-boot web应用程序的ContextClosedEvent无法完成
EN

Stack Overflow用户
提问于 2016-01-23 06:27:21
回答 2查看 849关注 0票数 0
代码语言:javascript
复制
@Service
public class ShutdownListener {

    private static final Logger LOGGER = Logger.getLogger(ShutdownListener.class);      
    @EventListener(ContextClosedEvent.class)
    public void onContextClosed(ContextClosedEvent event) {
        LOGGER.info("OAE: event :" + event);
        ApplicationContext ctx = event.getApplicationContext();
        LOGGER.info("OAE: context :" + ctx);
        try {
            LOGGER.info("sleeping");
            TimeUnit.SECONDS.sleep(60);
            LOGGER.info("slept");
        } catch (InterruptedException e) {
            LOGGER.error(e);
            e.printStackTrace();
        }   
   }

当spring-boot应用程序在本地运行时,这可以很好地工作。

当app使用最新的( java - buildpack -v3.5.1.zip) java buildpack作为jar部署到pivotal cloud-foundry,并使用cf cli停止应用程序时,它指示onContextClosed方法已被触发,而不是等待它成功完成。

有什么建议吗?有什么想法?

EN

回答 2

Stack Overflow用户

发布于 2016-01-23 21:25:12

这实际上是前面解释的情况的一个特例。虽然钩子开始执行,但在操作系统关闭等情况下,它可能会在完成之前终止。在这种情况下,一旦给出SIGTERM,O/S就会等待进程终止一段指定的时间。如果进程未在此时间限制内终止,则O/S将通过发出SIGTERM (或Windows中的对应命令)来强制终止进程。因此,当关闭钩子执行到一半时,可能会发生这种情况。

票数 1
EN

Stack Overflow用户

发布于 2016-01-23 21:36:16

对指示超时的代码库的引用,在超时之后,将SIGKILL发送到JVM https://github.com/cloudfoundry/warden/blob/master/warden-protocol/lib/warden/protocol/pb/stop.proto#L9-L17

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

https://stackoverflow.com/questions/34956997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档