发表于: 2017-12-29 22:42:17

0 508


一.今日完成

1.学习quartz框架,做任务调度,实现注册表统计

(1)Quartz框架:

Quartz是一个完全由java编写的开源作业调度框架,是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单运行十个,百个,甚至是好几万个Jobs这样复杂的程序

所谓作业调用,通俗来讲相当于Linux下的定时任务(crontab)或者简单的Spring定时任务。我们可以在预先设定好定时任务,然后程序就可以根据我们的需求在指定的时间点执行指定的命令,比如:统计分析日志、生成报表、更新某些数据等等。在基于Spring的应用中,如果是小的独立应用并且应用里的Job较少,我们完全可以使用Spring提供的轻量级的作业调度注解——@Scheduled。但是,在大中型系统中或者作业调度任务比较多时,我们就需要使用专门的作业调度框架来管理这些Job了。特别是在分布式架构中,为了消除单点隐患通常需要将应用部署到多个节点,使用Quartz框架就可以很方便地部署成作业调度集群,当集群中的master节点不能正常执行调度任务时,slave节点上的应用就可以自动抢回调度任务的执行权继续执行任务,从而提高了整个系统的作业调度的可用性

(2)Quartz框架的3个核心概念:

在使用Quartz时有3个核心概念需要理解,它们分别是:Job(任务)、Trigger(触发器)以及Scheduler(调度器)

i)Job:

Job表示作业调度中的一个单一任务,可以通过实现org.quartz.Job接口或者继承org.springframework.scheduling.quartz.QuartzJobBean类来定义。当然,在Spring中集成Quartz时还可以将Job定义成简单的POJO

ii)JobDetail:

Quartz每次调度Job时, 都重新创建一个Job实例, 所以它不直接接受一个Job的实例,相反它接收一个Job实现类(JobDetail:描述Job的实现类及其它相关的静态信息,如Job名字、描述、关联监听器等信息),以便运行时通过newInstance()的反射机制实例化Job

iii)Trigger:

所谓触发器,顾名思义就是设置一个Job的执行频率。我们通常使用的触发器主要有SimpleTrigger和CronTrigger这两个子类。当且仅当需调度一次或者以固定时间间隔周期执行调度,SimpleTrigger是最适合的选择;而CronTrigger则可以通过Cron表达式定义出各种复杂时间规则的调度方案:

Cron表达式的格式:秒 分 时 日 月 周 年(可选)

字段名允许的值允许的特殊字符
0-59, – * /
0-59, – * /
0-23, – * /
1-31, – * ? / L W C
1-12 or JAN-DEC, – * /
1-7 or SUN-SAT, – * ? / L C #
empty, 1970-2099, – * /
  • ?字符    表示不确定的值
  • ,字符    指定数个值
  • -字符    指定一个值的范围
  • /字符    指定一个值的增加幅度。n/m表示从n开始,每次增加m
  • L字符    用在日表示一个月中的最后一天,用在周表示该月最后一个星期X
  • W字符    指定离给定日期最近的工作日(周一到周五)
  • #字符    表示该月第几个周X。6#3表示该月第3个周五

iv)Scheduler:

调度器代表一个Quartz的独立运行容器。 Trigger和JobDetail可以注册到Scheduler中, 两者在Scheduler中拥有各自的组及名称, 组及名称是Scheduler查找定位容器中某一对象的依据, Trigger的组及名称必须唯一, JobDetail的组和名称也必须唯一(但可以和Trigger的组和名称相同,因为它们是不同类型的)

Scheduler可以将Trigger绑定到某一JobDetail中, 这样当Trigger触发时, 对应的Job就被执行。一个Job可以对应多个Trigger, 但一个Trigger只能对应一个Job。可以通过SchedulerFactory创建一个Scheduler实例。Scheduler拥有一个SchedulerContext,它类似于ServletContext,保存着Scheduler上下文信息,Job和Trigger都可以访问SchedulerContext内的信息。SchedulerContext内部通过一个Map,以键值对的方式维护这些上下文数据

(3)在Spring中集成Quartz的两种方式:

关于在Spring中集成Quartz有以下两种方式:

org.springframework.scheduling.quartz.JobDetailFactoryBean

org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean


二.明日计划

1.把后台管理模块的DB和接口文档整理出来,弄清楚业务逻辑.

2.做一个Spring+quartz的demo,能够每天定时查询数据库,且对查询结果持久化.

3.把微信支付的开发文档看两遍,寻找案例或者demo学习业务逻辑.


三.遇到问题

暂无.


四.收获

以上.



返回列表 返回列表
评论

    分享到