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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux目录结构详解_linux系统文件在哪个目录

    linux目录结构详解_linux系统文件在哪个目录前言平常linux系统用的也不少,那么linux下的每个目录都是用来干什么的,小伙伴们有仔细研究过吗?让我们来了解下吧Linux系统目录结构登录系统后,在当前命令窗口下输入命令:[root@

    2022年7月29日
    2
  • weavi链接打不开怎么办_酷喵vip账号免费领取

    weavi链接打不开怎么办_酷喵vip账号免费领取问题:为了科学上网,安装了一个VPN,安装完成后,网页出现:想着肯定是代理出问题了,在下面这个链接里找到了答案:win10网页你尚未连接代理服务器可能有问题,或地址不正确为了方便自己记忆,就在这记录一下:(关键点:打开手动设置代理-使用代理服务器)…

    2022年8月12日
    3
  • java中JDBC是什么?[通俗易懂]

    java中JDBC是什么?[通俗易懂]JDBC是什么?JDBC即(javadatabaseconnectivity数据连接)。JDBC是Sun公司编的一堆类和方法,都封装在java.sql包中。你可以利用这堆类和方法来把你的程序和数据库连通。JDBC的优点:跨数据库性通过使用JDBC,开发人员可以将SQL语句传送给几乎任何一种数据库。不必单独写一个程序访问Sybase,Oracle,或Microsoft的SQLServ…

    2022年6月23日
    21
  • android之SharedPreferences简介[通俗易懂]

    SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长整型、Int整型、String字符串型的保存.2个activity 之间的数据传递除了可以通过intent来传递,

    2022年3月9日
    22
  • word2vec原理简述[通俗易懂]

    word2vec原理简述[通俗易懂](原创)word2vec是将单词转为向量,并为后续应用机器学习的算法做准备。经典的模型有两种,skip-gram和cbow,其中,skip-gram是给定输入单词来预测上下文,而cbow相反,是给定上下文来预测输入单词。下面主要介绍skip-gram:1.skip-gram训练词对skip-gram首先设定所谓一个值(skip_window),作为一个单词选取它的上下文的单词…

    2022年5月16日
    29
  • python的三种取整方式_python取整函数-取整函数,PYTHON[通俗易懂]

    python的三种取整方式_python取整函数-取整函数,PYTHON[通俗易懂]本教程分享:《python取整函数》,python有什么办法使得int按照”四舍五入”的方式取…由于小数取整会采用比较暴力的截断方式,即向下取整,所以要想使得int()按照“四舍五入”的方式取整,可以采用如下方法:5.4“四舍五入”结果为:5,int(5.4+0.5)==55.6“四舍五入”结果为:6,int(5.6+0.5)==6python为什么算除法自动取整了。如图…

    2022年10月27日
    0

发表回复

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

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