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)


相关推荐

  • Navicat Premium 15安装需要注意的几个细节

    Navicat Premium 15安装需要注意的几个细节关于软件的下载和激活的流程,网上有太多文章了,这里就不赘述了。主要记录几个细节问题:安装完NavicatPremium15后,激活之前一定不要打开它!打开它不一定有问题,但可以尽量避免后面的各种错误。 下载完成之后,安装解压的过程尽量在断网的情况下进行!不断网不一定有问题,但可以尽量避免后面出现各种问题!激活的过程中,如果没注意这两种,那可能就是经历什么rsapublickeynotfind,或者输入激活密钥有个红叉号等等各种各样的问题,为了避免一些不必要的麻烦,还是按顺序来吧,希望看到

  • Hadoop 生态系统的构成(Hadoop 生态系统组件释义)

    Hadoop 生态系统的构成(Hadoop 生态系统组件释义)现在先让我们了解一下Hadoop生态系统的构成,主要认识Hadoop生态系统都包括那些子项目,每个项目都有什么特点,每个项目都能解决哪一类问题,能回答这三个问题就可以了(本段属于热身…重在理解Hadoop生态系统组成,现状,发展,将来)。HDFS:HDFS(HadoopDistributedFileSystem,Hadoop分布式文件系统)是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。HDFS简化了文件的一致性模

  • 【iOS开发-22】navigationBar导航栏,navigationItem建立:获取导航栏中的基本文本和button以及各种跳跃

    【iOS开发-22】navigationBar导航栏,navigationItem建立:获取导航栏中的基本文本和button以及各种跳跃

  • jsp中得到ContextPath的两种方法

    jsp中得到ContextPath的两种方法1.script 2.el ${pageContext.request.contextPath}

  • 数据库锁表如何解决_mysql数据库怎么解锁

    数据库锁表如何解决_mysql数据库怎么解锁这个问题之前遇到过一次,但是由于不知道导致锁表的原因,也没细想,就知道表被锁了,然后让别人把表给解锁了。但是前天的一次操作,让我亲眼见证了导致锁表的过程,以及如何给lock的表解锁。1.导致锁表的原因(同志们也可以参考是不是也是同样的操作啊。。。):1.1首先是大前提我们正常的框架在service层都会有事物控制,比如我一个service层的方法要执行更新两张表,这两个表只有同…

  • 视觉欺骗:你绝不会相信A和B颜色相同!

    视觉欺骗:你绝不会相信A和B颜色相同!心理导读:图中标为A和B的两个方格其实具有相同的颜色。明明一黑一白的方格,EdwardH.Adelson却说它们颜色一样!到底应该相信科学家还是自己的眼睛?——www.xinli001.com要证明其实很简单,请下载这张图片,然后用任何可以取色的图像处理软件打开它,接着用取色工具提取A、B方格的颜色值。下图是本图在Paint.NET里面的取色结果。可以看出,A、B方格的

    2022年10月31日

发表回复

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

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