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.>>>>>>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c数组移除指定元素方法_删除数组中的某个对象

    c数组移除指定元素方法_删除数组中的某个对象方式一:通过差集的方式排除0newList<int>{0,1,2,3,4,5}.Except(newList<int>{0}).ToList()方式二:先去重,在排除0varlist=newList<int>{0,1,2,3,4,5,0}.Distinct()list.Remove(0);

    2022年8月10日
    7
  • 运行时异常和一般异常_异常代码c0000005

    运行时异常和一般异常_异常代码c0000005说到异常,大家都熟悉,只要程序出错了,那么肯定会说:“哎呀,我的程序出错啦~它抛出异常啦”。但单单以“异常”的名称来称呼它们,未免也太粗糙了。我们毕竟是一个精致的程序员,当然得知道他们到底都有哪些种类啦。这就好比一个优质的男朋友(比如本帅博主)必须能够精准地区分女朋友的口红色号一般。那Java到底有哪些异常呢?其实也不多,Java提供了两种错误的异常类,分别是Error和Excepti…

    2022年9月28日
    2
  • 基于Containerd部署Kubernetes

    基于Containerd部署Kubernetes

    2021年6月4日
    115
  • 对比学习、自监督学习的理解「建议收藏」

    对比学习、自监督学习的理解「建议收藏」自监督学习定义:自监督学习主要是利用辅助任务从大规模的无监督数据中挖掘自身的监督信息来提高学习表征的质量,通过这种构造监督信息对网络进行训练,从而可以学习到对下游任务具有价值的表征。辅助任务(pretext):可以认为是一种为达到特定训练任务而设计的间接任务。pretext任务的好处是为了简化原任务的求解,在深度学习中就是避免人工标记样本,实现无监督的语义提取。Pretext任务可以进一步理解为:对目标任务有帮助的辅助任务。主要pretexttask包括:图像旋转、图像着色、图像修复。下游任务:图

    2022年9月14日
    4
  • 八、装饰者模式—巴厘岛,奶茶店的困扰! #和设计模式一起旅行#[通俗易懂]

    善于思考,方法总比问题多!故事背景我和漂亮的模式MM来到巴厘岛,这里火山爆发刚刚结束不久,一切要重新开始,来到这个地方几天后,觉得这个地方还是不错,于是就决定在这里开一个奶茶店,因为这里游客比较多,流量大,反正之前我们也没有开店的体验,那么一拍即合,开个奶茶店,体验一下了。 奶茶店的名字:Beautiful Life milk tea!名字起好了,那么我们就开始想如…

    2022年2月27日
    36
  • yarn安装程序[通俗易懂]

    yarn安装程序[通俗易懂]链接:yarn提取码:7zw7

    2025年6月12日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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