美文网首页技术首页投稿(暂停使用,暂停投稿)@IT·互联网
Quartz与SpringBoot的动态结合之二初恋(练)

Quartz与SpringBoot的动态结合之二初恋(练)

作者: 妖s银眉 | 来源:发表于2016-07-24 16:43 被阅读2150次

    SpringBoot简介

    SpringBoot是基于Spring框架,几乎零配置开箱即用(out-of-the-box)的开发框架。它本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。大部分的Spring Boot应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。

    构建最基础的java web应用

    不需要再配置web.xml与applicationContext.xml文件,也不需要再配置web服务器(Tomcat, Jetty等),只需要引入Spring Boot的开发依赖,以Maven项目为例:

    Spring Boot的开发依赖

    接下来,即可以直接着手写开发程序了,So easy。编写一个类包含一个main()函数:

    最基础的web应用

    启动该应用程序,在控制台中我们会发现启动了一个Tomcat容器,端口为8080。好了,一个最基本的基于Spring Boot的web应用程序就这样建立成功。是不是很酷?

    Spring Boot的web应用基本原理

    为保证显示效果,这里以图片展示:

    基本原理,引自( http://www.tianmaying.com/tutorial/spring-boot-overview)

    引入Quartz

    加入Quartz依赖

    Quartz依赖

    引入相关依赖

    相关依赖

    在程序中我们需要支持自动注入与事务,所以引入了上面两个相关依赖。

    首次结合场景描述

    1.服务启动成功后,即开始定时器的运行;

    2.不涉及数据的存储及维护;

    3.只使用一个简单的固定的定时器来模拟定时任务;

    场景分析

    1.解决服务启动后,即运行定时器的问题,需要一个监听器,来监听应用;

    2.不需要配置数据库连接信息,也不需要基本的配置信息来维护;

    3.需要一个任务处理器,即Job;

    4.触发时间可以是固定的。

    代码清单

    1.QuartzApplication,启动应用的包含main()函数的类。

    2.MyJob,实现Quartz框架中Job接口,用来定义需要执行的任务。

    3.ScheduleListener,继承spring的ApplicationListener监听器,并监控ContextRefreshedEvent事件(容器初始化完成事件),即当所有的Bean都初始化好之后,启动定时器。

    4.MyScheduler,借助Quartz框架中的Scheduler,实现任务调度。

    关键代码

    QuartzApplication

    初始化SchedulerFactoryBean,以供MyScheduler使用

    应用程序类上,还需要加扫描路径的注解,@ComponentScan(basePackages = { "com.*.* " })

    MyJob

    任务处理

    MyJob实现org.quartz.Job接口, 重写execute方法,当任务被触发时,便执行该方法。

    ScheduleListener

    监听器

    容器初始化完成后,便会执行该监听器的onApplicationEvent(ContextRefreshedEvent)方法,它确保容器所需要的Bean都初始化完毕。

    MyScheduler

    调度任务

    这里定义了一个每隔20秒执行一次的任务。新建Job时(JobDetail对象),指定执行MyJob中的任务。trigger没有指定任务开始时间,默认为当前时间,也没有指定结束时间,结束时间是不确定的,任务会一直执行,只要触发时间满足。schedulerFactoryBean是QuartzApplication中初始化到容器中的Bean,在此类中使用@Autowired方式注入到当前类中。MyScheduler类需要加@Serivce注解,作为一个Bean初始化到容器中。

    实验结果

    实验结果

    相关文章

      网友评论

      • zoterap:推荐使用markdown,这样可以省略很多图片的上传`
        妖s银眉:@ZBreakingBad 哈哈,后续还望继续关注。
        zoterap:@妖s银眉 工作太忙了,偶尔看看简书,还有回复~
        妖s银眉: @ZBreakingBad 嗯嗯,好的,下次试试看。谢谢😜
      • 妖s银眉:补充说明 :
        通过@Bean注解配置类中的相应方法,则该方法名默认就是Bean名,该方法返回值就是Bean对象,将该Bean初始化到Context容器中。使用时用诸如@Autowired等注解实现Bean依赖注入。
        使用@Bean注解的方法不能是private、final或static的。基于Java类定义Bean配置元数据需要CGLIB的支持,因此要保证类路径中包括CGLIB的jar包。

      本文标题:Quartz与SpringBoot的动态结合之二初恋(练)

      本文链接:https://www.haomeiwen.com/subject/qjdwjttx.html