spring boot定时任务Quartz

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提供的锁表,为多个节点调度提供分布式锁,实现分布式调度

猜你喜欢

转载自blog.csdn.net/weixin_55806809/article/details/121430372