SpringBoot Quartz应用

本文介绍了如何在SpringBoot项目中集成Quartz定时任务框架,包括所需的Maven依赖和MySQL数据库表的创建步骤,旨在帮助开发者实现后台定时任务的管理。
摘要由CSDN通过智能技术生成

首先maven需要导入两个jar包

<dependency>
     <groupId>org.quartz-scheduler</groupId>
     <artifactId>quartz</artifactId>
     <version>2.3.2</version>
</dependency>
 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.1.3.RELEASE</version>
</dependency>
@Configuration
public class QuartzConfig {
   

	//引入数据源
    @Autowired
    @Qualifier(value = "dataSource")
    private DataSource dataSource;
	
	//重写自定义job工厂
    @Autowired
    private SpringJobFactory springJobFactory;
	
	
	//此处代替的为《quartz.properties》配置文件
    //此处只写我用到的这个配置,其他的配置可在网上自行百度 标记一些特殊的配置
    private Properties createProperties(){
   
        Properties prop = new Properties();
        prop.put("org.quartz.scheduler.instanceName","Quartz");
        prop.put("org.quartz.scheduler.instanceId","AUTO");
        prop.put("org.quartz.threadPool.class","org.quartz.simpl.SimpleThreadPool");
        prop.put("org.quartz.threadPool.threadCount","10");
        prop.put("org.quartz.threadPool.threadPriority","5");
        prop.put("org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread","true");
        prop.put("org.quartz.jobStore.class","org.quartz.impl.jdbcjobstore.JobStoreTX");
        prop.put("org.quartz.jobStore.useProperties","true");
        //是否加入集群模式
        prop.put("org.quartz.jobStore.isClustered","true");
        prop.put("org.quartz.jobStore.clusterCheckinInterval","20000");
       //在存储在数据库中时,数据库表的前缀 不同数据库需要单独注意建表语句和此处前缀的大小写
        prop.put("org.quartz.jobStore.tablePrefix","QRTZ_");
        prop.put("org.quartz.jobStore.driverDelegateClass","org.quartz.impl.jdbcjobstore.StdJDBCDelegate");
        prop.put("org.quartz.jobStore.misfireThreshold","60000");
        prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime","1");
        prop.put("org.quartz.plugin.triggHistory.class","org.quartz.plugins.history.LoggingJobHistoryPlugin");
        prop.put("org.quartz.plugin.shutdownhook.class","org.quartz.plugins.management.ShutdownHookPlugin");
        prop.put("org.quartz.plugin.shutdownhook.cleanShutdown","true");
        prop.put("org.quartz.jobStore.acquireTriggersWithinLock","true");
        return prop;
    }
	
	//配置SchedulerFactoryBean
    @Bean
    public SchedulerFactoryBean schedulerFactoryBean(){
   
        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
        schedulerFactoryBean.setJobFactory(springJobFactory);
        schedulerFactoryBean.setDataSource(dataSource);
        //此处设置的为在你更新完定时事件后会不会在系统重启后修改定时时间,true会将数据库的表中的数据清空再重建 false会判断定时任务是否存在,存在的话读取数据库中的任务时间否则进行数据插入
        schedulerFactoryBean.setOverwriteExistingJobs(false);
        schedulerFactoryBean.setApplicationContextSchedulerContextKey("applicationContextKey");
        schedulerFactoryBean.setQuartzProperties(createProperties());
        //多Trigger时的写法
        //schedulerFactoryBean.setTriggers(exportExcelTrigger().getObject(),refreshLockedUsersTrigger().getObject());
        //单trigger的写法,需注意此处的Trigger的获取必须再次数获取Trigger 若直接返回的话会报空指针 导致的原因为 Bean的创建在getObject之前
        //多Trigger时需要多次编写flushJobDetailFactoryBean及refreshLockedUsersTrigger
        schedulerFactoryBean.setTriggers(refreshLockedUsersTrigger().getObject());
        return schedulerFactoryBean;
    }


    @Bean
    public Scheduler scheduler(){
   
        return schedulerFactoryBean().getScheduler();
    }
	
    @Bean
    public JobDetailFactoryBean flushJobDetailFactoryBean(){
   
        JobDetailFactoryBean jobDetail = new JobDetailFactoryBean();
        jobDetail.setJobClass(QuartzFlushUser.class);
        jobDetail.setDurability(true);
        jobDetail.setRequestsRecovery(true);
        return jobDetail;
    }

    @Bean
    public CronTriggerFactoryBean refreshLockedUsersTrigger (){
   
        CronTriggerFactoryBe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值