1.使用quartz定时任务
依赖
<!--定时任务 start-->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<!--定时任务 end-->
static目录下新建一个quartz.properties文件,内容如下:
org.quartz.scheduler.instanceName = DefaultQuartzScheduler
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.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
# 定时任务表的前缀
org.quartz.jobStore.tablePrefix = QRTZ_
# window下,默认不区分表名的大小写 ,Linux中区分大小写,所以这只MySQL不区分表名大小写
org.quartz.jobStore.isClustered = true
org.quartz.jobStore.clusterCheckinInterval = 15000
船舰Java配置文件JobConfig.java,内容如下
@Configuration
public class JobConfig {
public static final String KEY = "applicationContextSchedulerContextKey";//设置spring的上下文
/**
* 注入数据源
* @param dataSource 数据源
*/
@Bean("adminQuartzScheduler")
public SchedulerFactoryBean quartzScheduler(DataSource dataSource) {
SchedulerFactoryBean quartzScheduler = new SchedulerFactoryBean();//注入数据源
try {
quartzScheduler.setQuartzProperties(PropertiesLoaderUtils.loadProperties(new ClassPathResource("quartz.properties")));//加载quartz.properties文件
} catch (IOException e) {
e.printStackTrace();
}
quartzScheduler.setDataSource(dataSource);//加载数据源
quartzScheduler.setOverwriteExistingJobs(true);//如果系统检测到定时任务已经存在,覆盖
quartzScheduler.setApplicationContextSchedulerContextKey(KEY);//获取spring的上下文
quartzScheduler.setStartupDelay(10);
return quartzScheduler;
}
}
相关数据库表如下:
在需要定时任务的地方注入
@Autowired
private Scheduler scheduler;
2 .Quartz数据库表分析
参考:Quartz数据库表分析
如果要实现一个trigger的管理系统,其实也就是对这几张表的维护。
//前6张都是关于各种triggers的信息
1.qrtz_blob_triggers//自定义的triggers使用blog类型进行存储,非自定义的triggers不会存放在此表中
2.qrtz_cron_triggers//存储CronTrigger
3.qrtz_simple_triggers//存储SimpleTrigger
4.qrtz_simprop_triggers//存储CalendarIntervalTrigger和DailyTimeIntervalTrigger两种类型的触发器
5.qrtz_fired_triggers//存储已经触发的trigger相关信息
6.qrtz_triggers//存储定义的trigger
7.qrtz_job_details//存储jobDetails信息
8.qrtz_calendars//Quartz为我们提供了日历的功能,可以自己定义一个时间段,可以控制触发器在这个时间段内触发或者不触发
9.qrtz_paused_trigger_grps//存放暂停掉的触发器
10.qrtz_scheduler_state//存储所有节点的scheduler
11.qrtz_locks//Quartz提供的锁表,为多个节点调度提供分布式锁,实现分布式调度