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


相关推荐

  • Opacity 属性引发的层叠问题

    Opacity 属性引发的层叠问题Opacity属性引发的层叠问题总结

    2022年5月26日
    50
  • pycharm关于第三方库操作大全

    pycharm关于第三方库操作大全pycharm关于第三方库操作大全

    2022年8月28日
    3
  • 深度学习模型压缩与优化加速(Model Compression and Acceleration Overview)

    深度学习模型压缩与优化加速(Model Compression and Acceleration Overview)1.简介深度学习(DeepLearning)因其计算复杂度或参数冗余,在一些场景和设备上限制了相应的模型部署,需要借助模型压缩、优化加速、异构计算等方法突破瓶颈。模型压缩算法能够有效降低参数冗余,从而减少存储占用、通信带宽和计算复杂度,有助于深度学习的应用部署,具体可划分为如下几种方法(后续重点介绍剪枝与量化):线性或非线性量化:1/2bits,int8和fp16等; 结构或…

    2022年9月27日
    5
  • pycharm无法安装第三方模块_如何在pycharm中安装第三方库

    pycharm无法安装第三方模块_如何在pycharm中安装第三方库使用pytharm安装python的第三方库很方便,但常常也会报错,下面归纳一些常见的问题。1.pip版本太老这应该是最常见的问题了,解决办法就是更新pip版本,升级命令如下:python-mpipinstall–upgradepip查看pip版本命令如下:pip-V2.更换源镜像pycharm默认的安装源网址是https://pypi.python….

    2022年8月26日
    8
  • 常用渗透测试工具(数据包渗透测试)

    BurpSuiteBurpSuite能高效率地与多个工具一起工作,例如:一个中心站点地图是用于汇总收集到的目标应用程序信息,并通过确定的范围来指导单个程序工作。在一个工具处理HTTP请求和响应时,它可以选择调用其他任意的Burp工具。例如:代理记录的请求可被Intruder用来构造一个自定义的自动攻击的准则,也可被Repeater用来手动攻击,也可被Scanner用来分析漏洞,或者被Spider(网络爬虫)用来自动搜索内容。应用程序可以是“被动地”运行,而不是产生大量的自动请求。Burp

    2022年4月18日
    122
  • spring boot 时间戳转日期格式

    spring boot 时间戳转日期格式第一种方式:默认的json处理是jackson也就是对configureMessageConverters没做配置时mybatis数据查询返回的时间,是一串数字,如何转化成时间。两种方法,推荐第一种方法一:可以在apllication.property加入下面配置就可以#时间戳统一转换  spring.jackson.date-format=yyyy-MM-ddHH:mm:ss…

    2022年6月21日
    59

发表回复

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

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