quartz学习与应用(一、简单快速入门应用)
quartz最新版本下载:http://www.quartz-scheduler.org/downloads/
1.数据库12表:
- 表信息解析:
1.qrtz_blob_triggers : 以Blob 类型存储的触发器。
2.qrtz_calendars:存放日历信息, quartz可配置一个日历来指定一个时间范围。
3.qrtz_cron_triggers:存放cron类型的触发器。
4.qrtz_fired_triggers:存放已触发的触发器。
5.qrtz_job_details:存放一个jobDetail信息。
6.qrtz_job_listeners:job监听器。
7.qrtz_locks: 存储程序的悲观锁的信息(假如使用了悲观锁)。
8.qrtz_paused_trigger_graps:存放暂停掉的触发器。
9.qrtz_scheduler_state:调度器状态。
10.qrtz_simple_triggers:简单触发器的信息。
11.qrtz_trigger_listeners:触发器监听器。
12.qrtz_triggers:触发器的基本信息。
2.引入依赖 pom.xml
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
3.配置文件:
-
quartz的配置文件: quartz.properties
#实例名,集群各节点的实例名相同 org.quartz.scheduler.instanceName = DefaultQuartzScheduler #实例ID,设为AUTO则由Quartz自动根据主机名、时间戳生成实例ID org.quartz.scheduler.instanceId = AUTO org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount = 10 org.quartz.threadPool.threadPriority = 5 org.quartz.jobStore.misfireThreshold = 60000 #存储任务为数据库存储,若使用内存,则配置成 org.quartz.simpl.RAMJobStore org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.tablePrefix = QRTZ_ org.quartz.jobStore.isClustered = true org.quartz.jobStore.clusterCheckinInterval = 15000
-
项目配置文件:application.yml (本例以springboot为例)
server: port: ${port:8081} spring: datasource: url: jdbc:mysql://127.0.0.1:3306/quartz?useUnicode=true&characterEncoding=utf-8 username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver
4.示例代码:
-
quartz的配置类:(依个人配置,不一定和这一样。其实就是quart初始化、调度器工厂和trigger注册等)
package com.weijs.demo.quartz.config; import org.quartz.Trigger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.support.PropertiesLoaderUtils; import org.springframework.scheduling.quartz.SchedulerFactoryBean; import javax.sql.DataSource; import java.io.IOException; import java.util.Properties; /** * quart初始化和trigger注册 */ @Configuration public class QuartzConfig { @Autowired private DataSource dataSource ; @Autowired private QuartzJobConfig quartzJobConfig; @Bean public Properties quartzProperties(){ Properties properties = null; try { properties = PropertiesLoaderUtils.loadProperties(new ClassPathResource("quartz.properties"));//加载配置文件 }catch (IOException ex){ ex.printStackTrace(); } return properties; } /** * 调度器 工厂 * * 整个流程: * 调度器(配置好各种配置)中放入任务触发器-->任务触发器去调任务明细bane-->调任务明细bane无调用任务具体处理类 * * * @return */ @Bean public SchedulerFactoryBean quartzScheduler(){ SchedulerFactoryBean quartzScheduler = new SchedulerFactoryBean(); quartzScheduler.setDataSource(dataSource); quartzScheduler.setQuartzProperties(quartzProperties());//配置 quartzScheduler.setOverwriteExistingJobs(true);//是否覆盖已存在的任务 Trigger trigger [] ={quartzJobConfig.demoJobTrigger().getObject()}; quartzScheduler.setTriggers(trigger);//放入任务触发器,任务触发器去调任务明细bane,调任务明细bane无调用任务具体处理类 return quartzScheduler; } }
-
job的配置:(其实就是job的详情信息注册)
package com.weijs.demo.quartz.config; import com.weijs.demo.quartz.DemoJob; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.quartz.CronTriggerFactoryBean; import org.springframework.scheduling.quartz.JobDetailFactoryBean; /*** * job注册 */ @Configuration public class QuartzJobConfig { @Value("${jobs.demo.cron}") private String demoCron; /** * 任务明细bean * @return */ @Bean public JobDetailFactoryBean demoJobDetail(){ JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean(); jobDetailFactoryBean.setJobClass(DemoJob.class);//具体处理类 jobDetailFactoryBean.setDescription("测试demo定时job");//任务描述 jobDetailFactoryBean.setDurability(true); return jobDetailFactoryBean; } /** * 任务触发器bean * @return */ @Bean public CronTriggerFactoryBean demoJobTrigger(){ CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean(); cronTriggerFactoryBean.setJobDetail(demoJobDetail().getObject());//任务明细bean cronTriggerFactoryBean.setDescription("每10秒跑一次");//触发器描述 cronTriggerFactoryBean.setCronExpression(demoCron);//cron表达式 return cronTriggerFactoryBean; } }
-
job的具体业务逻辑处理类:
package com.weijs.demo.quartz; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; import org.springframework.stereotype.Component; @Component public class DemoJob extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { System.out.println("=====quartz跑起来了!!!===========这是任务业务处理类"); } }