spring管理quartz生命周期之`SchedulerFactoryBean`

spring管理quartz生命周期之`SchedulerFactoryBean`spring管理quartz生命周期之SchedulerFactoryBeanspring通过SchedulerFactoryBean来管理quartz的生命周期。在spring容器启动时启动调度器,在spring容器关闭时停止调度器FactoryBeanthatcreatesandconfiguresaQuartz{@linkorg.quartz.Scheduler}…

大家好,又见面了,我是你们的朋友全栈君。

spring管理quartz生命周期之SchedulerFactoryBean

spring通过SchedulerFactoryBean来管理quartz的生命周期。在spring容器启动时启动调度器,在spring容器关闭时停止调度器

FactoryBeanthat creates and configures a Quartz {@link org.quartz.Scheduler},manages its lifecycle as part of the Spring application context, and exposes the Scheduler as bean reference for dependency injection.

为了防止启动失败,我们可以通过实现ApplicationListener接口来手动判断定时任务调试器是否启动,若没有启动,可以再次启动:

@Component("quartzStarterListener")
public class QuartzStarterListener implements ApplicationListener { 
   

    private static final Logger LOGGER = LoggerFactory.getLogger(QuartzStarterListener.class);
    private boolean started = false;

    @Autowired
    private Scheduler scheduler;


    @Override
    public void onApplicationEvent(ApplicationEvent event) {

        if (event instanceof ContextRefreshedEvent){
            LOGGER.info("trying to refresh.>>>>>>>>>");
            try {
                if (!started && !scheduler.isStarted()){
                    started = true;
                    LOGGER.info("trying to start quartz.>>>>>>>>");
                    scheduler.start();
                    LOGGER.info("quartz has been started.>>>>>>>>");
                }
            } catch (SchedulerException e) {
                LOGGER.error("error occurred when starting quartz.>>>>>>>>", e);
                e.printStackTrace();
            }

        }else if (event instanceof ContextClosedEvent ||
                event instanceof ContextStoppedEvent){
            try {
                if (scheduler.isStarted()){
                    //等待所有定时任务执行完毕才停止
                    scheduler.shutdown(true);
                    LOGGER.info("quartz has been stopped.>>>>>>");
                }
            } catch (SchedulerException e) {
                LOGGER.error("error occurred when stopping quartz.>>>>>>>", e);
                e.printStackTrace();
            }
        }

    }
}

结果:

[2018-08-16 10:47:03.924] [ INFO] QuartzStarterListener trying to refresh.>>>>>>>>>
16-Aug-2018 10:47:03.929 信息 [RMI TCP Connection(5)-127.0.0.1] org.springframework.web.servlet.DispatcherServlet.initServletBean
FrameworkServlet 'springDispatcherServlet': initialization completed in 1947 ms
[2018-08-16 10:47:03,963] Artifact ssm:war exploded: Artifact is deployed successfully
[2018-08-16 10:47:03,963] Artifact ssm:war exploded: Deploy took 12,434 milliseconds

...
[2018-08-16 10:47:06.506] [ INFO] QuartzScheduler Scheduler scheduler_$_NON_CLUSTERED shutdown complete.
[2018-08-16 10:47:06.506] [ INFO] QuartzStarterListener quartz has been stopped.>>>>>>
[2018-08-16 10:47:06.518] [ INFO] QuartzStarterListener quartz has been stopped.>>>>>>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/142515.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 什么是代码_大专程序员有人要吗

    什么是代码_大专程序员有人要吗什么是代码,什么是数据。代码是能够处理其他数据的数据,而数据是储存信息的数据。数据有时能够变成代码,代码也可以变成数据。甚至,一段数据中某一段,都可以单独拿出来,通过执行器执行(执行器,比如exe的执

  • oracle 行列转换 pivot

    oracle 行列转换 pivot

  • C++ 输入的是1.3变1.29999995问题

    C++ 输入的是1.3变1.29999995问题今天一位粉丝在评论中问到了这个问题,我简单的说了原理和改进方法,将float改为double就可以了,下面我进行详细整理先说一下debug是啥意思马克2号(Harvard Mark II)编制程序的葛丽丝·霍波(Grace Hopper)是一位美国海军准将及计算机科学家,同时也是世界最早的一批程序设计师之一。有一天,她在调试设备时出现故障,拆开继电器后,发现有只飞蛾被夹扁在触点中间,从而…

  • 数据结构JAVA—递归算法「建议收藏」

    数据结构JAVA—递归算法「建议收藏」http://blog.csdn.net/wangjinyu501/article/details/8248492  原版一、基本概念       递归算法是一种直接或者间接调用自身函数或者方法的算法。Java递归算法是基于Java语言实现的递归算法。递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。递归算法对解决

  • 计算机全选的键盘,全选快捷键是什么,教您电脑全选快捷键是什么[通俗易懂]

    计算机全选的键盘,全选快捷键是什么,教您电脑全选快捷键是什么[通俗易懂]我们在编辑内容的时候难免会遇到全选快捷键的使用,如果使用鼠标容易出错,又不方便,如果使用全选快捷键会不会方便呢?那么全选快捷键是什么?怎么快速全选文件呢?下面,小编给大家分享电脑全选快捷键的操作按键。在日常的工作中,快捷键的使用能提高我们的工作速度,因此我们会去记住一些快捷键以方便使用。不少人在编辑文字的时候,想要使用全选快捷键,但是却不知道要按键盘哪几个键,下面,小编就来跟大家介绍电脑全选快捷键…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号