[记录]Flink中取消job时没有关闭springApplication

写了一个Flink程序, 加载spring, 运行定时任务,

public class LoopSource implements SourceFunction<String> {
    @Override
    public void run(SourceContext<String> ctx) throws Exception {
        try {
            //这句代码会加载spring
            Class.forName(SpringContextUtils.class.getName());
        } catch (ClassNotFoundException e) {
            LOGGER.error("", e);
        }
        while(true) {
            TimeUnit.MINUTES.sleep(1);
            ctx.collect("我是帅哥");
        }
    }

    @Override
    public void cancel() {
    }
}

定时任务正常运行, 但是在取消掉job后发现定时任务仍然在运行.
(猜测: 取消任务并不会导致容器关闭, 已经加载的类也不会销毁, 定时任务当然不会停止, 更进一步原因以后有时间分析一下)
解决方案: 取消job时销毁spring.

public class LoopSource implements SourceFunction<String> {
    @Override
    public void run(SourceContext<String> ctx) throws Exception {
        try {
            //这句代码会加载spring
            Class.forName(SpringContextUtils.class.getName());
        } catch (ClassNotFoundException e) {
            LOGGER.error("", e);
        }
        while(true) {
            TimeUnit.MINUTES.sleep(1);
            ctx.collect("我是帅哥");
        }
    }

    @Override
    public void cancel() {
        /**
         * 注意这一步很重要,关闭springApplication, 不然cancel Job不会停止定时任务
         */
        SpringContextUtils.shutdown();
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 作业的必要性以及存在的问题 1. 为什么需要作业? 作业即定时任务。一般来说,系统可使用消息传递代替部分使用作业的...
    Sununy阅读 6,906评论 3 25
  • 原文链接:https://docs.spring.io/spring-boot/docs/1.4.x/refere...
    pseudo_niaonao阅读 4,787评论 0 9
  • 要加“m”说明是MB,否则就是KB了. -Xms:初始值 -Xmx:最大值 -Xmn:最小值 java -Xms8...
    dadong0505阅读 4,955评论 0 53
  • Flink总结 Flink简介 Apache Flink作为一款高吞吐量、低延迟的针对流数据和批数据的分布式实时处...
    bigdata_er阅读 10,658评论 0 10
  • 不要总呆在舒适区 舒适区人人都喜爱,但是能有什么好的影响呢? 做最真实的自己 大学生总是喜欢呆在宿舍里,打打游戏,...
    简一莘阅读 181评论 0 2