项目中一般都会用到定时任务,spring在定时任务这块有很好的封装,早起版本,quartz的jar是独立出来的,现在spring将quartz的jar包集成了进去,springBoot也只需引入spring-boot-starter-quartz就ok了,非常简便,但也不得不服源代码开发大牛,我们想要知道底层,得自己去研究了。下面就通过代码简单说明quartz数据库方式。
<!-- 以数据库存储的方式来QUARTZ调度 -->
<bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="applicationContextSchedulerContextKey" value="applicationContext"/>
<!--quartz的配置文件,会过properties读取配置,配置内容诸如corn表达式等等-->
<property name="configLocation" value="classpath:META-INF/conf/quartz.properties"/>
<!--QuartzScheduler 延时启动,应用启动完后 QuartzScheduler 再启动 value:延时启动时间-->
<property name="startupDelay" value="20"/>
<!-- QuartzScheduler 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 -->
<property name="overwriteExistingJobs" value="true"/>
<property name="triggers">
<list>
<!--可配置多个-->
<ref bean="XXXXTrigger" />
</list>
</property>
</bean>
<!--配置job-->
<bean id="XXXXJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<!--jobClass 需要继承ScanMsgTaskJob ,该类需要引入spring-contex-support.jar-->
<property name="jobClass" value="com.XXX.xxx"></property>
<property name="durability" value="true"></property>
</bean>
<!--配置触发器-->
<bean id="XXXXTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="XXXXJob"></property>
<!--corn 表达式,自己可以百度搜写法,不难,规则是定好的-->
<!--秒 分 时 天 年-->
<property name="cronExpression" value="0 0 2 * * ?"></property>
</bean>
所有配置完成后,启动项目数据库会自动生成很多quartz表:
每个表的意思,本人百度了https://blog.csdn.net/tengdazhang770960436/article/details/51019291
解释如下:
1.1.qrtz_blob_triggers : 以Blob 类型存储的触发器。
1.2.qrtz_calendars:存放日历信息, quartz可配置一个日历来指定一个时间范围。
1.3.qrtz_cron_triggers:存放cron类型的触发器。
1.4.qrtz_fired_triggers:存放已触发的触发器。
1.5.qrtz_job_details:存放一个jobDetail信息。
1.6.qrtz_job_listeners:job**监听器**。
1.7.qrtz_locks: 存储程序的悲观锁的信息(假如使用了悲观锁)。
1.8.qrtz_paused_trigger_graps:存放暂停掉的触发器。
1.9.qrtz_scheduler_state:调度器状态。
1.10.qrtz_simple_triggers:简单触发器的信息。
1.11.qrtz_trigger_listeners:触发器监听器。
1.12.qrtz_triggers:触发器的基本信息。
其中qrtz_cron_triggers、qrtz_job_details、qrtz_triggers这几个表在项目启动后会填充数据;qrtz_cron_triggers会记录配置的完整tragger信息,包括corn表达式;qrtz_job_details保存了所有的job信息,以及该job位于工程的包路径;qrtz_triggers记录了所有触发器的信息,包括下次执行时间、执行优先级等等。