springboot动态配置定时任务2种方式,整合Quartz多线程并发执行多个定时任务配置

来源:互联网 发布:ssh和sftp端口号一致 编辑:程序博客网 时间:2024/05/29 10:18

我的项目是采用的idea+gradle+springboot项目构建,下面是springboot实现定时任务所需要的jar包

//定时任务使用compile group: 'org.quartz-scheduler', name: 'quartz', version: '2.3.0'compile group: 'org.springframework', name: 'spring-context-support', version: '4.3.11.RELEASE'

方式一在项目启动类上添加启动schedule注解,采用的是串行的方式执行定时任务

@Controller@EnableScheduling@SpringBootApplicationpublic class LxybootApplication extends SpringBootServletInitializer {
采用是cron的配置方式  秒/分/时/日/月周的配置顺序,下面定时任务的意思是说1分钟执行一次
@Componentpublic class ScheduleJobs {    public final static long SECOND = 1 * 1000;    private UserService userService = SpringContextHelper.getBean("userService");    @Scheduled(cron = "0 0/1 * * * ?")    public void cronJob() {        User user = new User();        user.setName("lisi");        System.out.println("执行爬取任务查询会员lisi"+userService.getUser(user));        HttpExecute.sendGet("http://www.chinawutong.com");    }}
方式二采用线程池可直接修改数据库完成动态更改定时任务的执行间隔

package com.lxy;import com.lxy.config.springs.AutowiringSpringBeanJobFactory;import com.lxy.tasks.CronJob;import com.lxy.utils.PropertiesHander;import org.apache.commons.dbcp.BasicDataSource;import org.quartz.JobDetail;import org.quartz.Trigger;import org.quartz.spi.JobFactory;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.beans.factory.config.PropertiesFactoryBean;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.io.ClassPathResource;import org.springframework.scheduling.quartz.CronTriggerFactoryBean;import org.springframework.scheduling.quartz.JobDetailFactoryBean;import org.springframework.scheduling.quartz.SchedulerFactoryBean;import javax.sql.DataSource;import java.io.IOException;import java.util.Properties;@Configurationpublic class QuartzConfiguration {    @Bean(destroyMethod = "close")    public DataSource dataSource() {        BasicDataSource dataSource = new BasicDataSource();        dataSource.setDriverClassName("com.mysql.jdbc.Driver");        String url = PropertiesHander.getPropertiesValue("quartzdata.url");        String username = PropertiesHander.getPropertiesValue("quartzdata.username");        String password = PropertiesHander.getPropertiesValue("quartzdata.password");        dataSource.setUrl(url);        dataSource.setUsername(username);        dataSource.setPassword(password);        dataSource.setMaxActive(100);        dataSource.setInitialSize(1);        dataSource.setMaxWait(60000);        dataSource.setMaxIdle(15);        dataSource.setMinIdle(5);        dataSource.setTestOnBorrow(true);//解决link faile        dataSource.setValidationQuery("SELECT 1");        dataSource.setRemoveAbandoned(true);        dataSource.setRemoveAbandonedTimeout(180);        return dataSource;    }    @Bean    public JobFactory jobFactory(ApplicationContext applicationContext) {        AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();        jobFactory.setApplicationContext(applicationContext);        return jobFactory;    }    @Bean    public Properties quartzProperties() throws IOException {        PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();        propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties"));        propertiesFactoryBean.afterPropertiesSet();        return propertiesFactoryBean.getObject();    }/**这是一组定时任务A   开始*/    @Bean(name = "cronJob")    public JobDetailFactoryBean creatptdataBetDayJob() {        JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();        factoryBean.setJobClass(CronJob.class);        factoryBean.setName(CronJob.class.getName());        factoryBean.setGroup("cronmygroup");        factoryBean.setDurability(true);        return factoryBean;    }    @Bean(name = "cronJobTrigger")    public CronTriggerFactoryBean cronptdatajobTriggerFactoryBean(@Qualifier("cronJob") JobDetail jobDetail){        CronTriggerFactoryBean stFactory = new CronTriggerFactoryBean();        stFactory.setJobDetail(jobDetail);        stFactory.setStartDelay(3000);        stFactory.setName("crontrigger");        stFactory.setGroup("cronmygroup");        String express = PropertiesHander.getPropertiesValue("cron.job.cron.express");        stFactory.setCronExpression(express);        return stFactory;    }    @Bean    public SchedulerFactoryBean ptdatajobSchedulerFactoryBean(DataSource dataSource, JobFactory jobFactory, @Qualifier("cronJobTrigger") Trigger sampleJobTrigger) throws IOException {        SchedulerFactoryBean factory = new SchedulerFactoryBean();        factory.setOverwriteExistingJobs(true);        factory.setJobFactory(jobFactory);        factory.setDataSource(dataSource);        factory.setQuartzProperties(quartzProperties());        factory.setTriggers(sampleJobTrigger);        return factory;    }
/**这是一组定时任务A   结束*/
}下面是配置quartz.properties的内容
org.quartz.scheduler.instanceName=DefaultQuartzSchedulerorg.quartz.scheduler.instanceId=AUTOorg.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPoolorg.quartz.threadPool.threadCount: 10org.quartz.threadPool.threadPriority: 5org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: falseorg.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTXorg.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegateorg.quartz.jobStore.useProperties=trueorg.quartz.jobStore.misfireThreshold=60000org.quartz.jobStore.tablePrefix=QRTZ_org.quartz.scheduler.rmi.export: falseorg.quartz.scheduler.rmi.proxy: falseorg.quartz.jobStore.isClustered=trueorg.quartz.jobStore.clusterCheckinInterval=20000
具体的定时任务业务执行 类CronJob
public class CronJob  extends QuartzJobBean {    private UserService userService = SpringContextHelper.getBean("userService");    public static  final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    @Override    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {        User selectObj =new User();        selectObj.setName("lisi");        User user = userService.getUser(selectObj);        System.out.println("执行定时任务开始----"+sdf.format(new Date())+user.getId()+"*----*"+user.getName());    }}
下面是定时任务线程池自动插入数据所需要的数据库表结构qrtz_blob_triggers.sql
/*Navicat MySQL Data TransferSource Server         : 127.0.0.1Source Server Version : 50546Source Host           : 127.0.0.1:3306Source Database       : hs_jobTarget Server Type    : MYSQLTarget Server Version : 50546File Encoding         : 65001Date: 2017-10-04 09:51:25*/SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for qrtz_blob_triggers-- ----------------------------DROP TABLE IF EXISTS `qrtz_blob_triggers`;CREATE TABLE `qrtz_blob_triggers` (  `SCHED_NAME` varchar(120) NOT NULL,  `TRIGGER_NAME` varchar(200) NOT NULL,  `TRIGGER_GROUP` varchar(200) NOT NULL,  `BLOB_DATA` blob,  PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`),  KEY `SCHED_NAME` (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`),  CONSTRAINT `QRTZ_BLOB_TRIGGERS_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Table structure for qrtz_calendars-- ----------------------------DROP TABLE IF EXISTS `qrtz_calendars`;CREATE TABLE `qrtz_calendars` (  `SCHED_NAME` varchar(120) NOT NULL,  `CALENDAR_NAME` varchar(200) NOT NULL,  `CALENDAR` blob NOT NULL,  PRIMARY KEY (`SCHED_NAME`,`CALENDAR_NAME`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Table structure for qrtz_cron_triggers-- ----------------------------DROP TABLE IF EXISTS `qrtz_cron_triggers`;CREATE TABLE `qrtz_cron_triggers` (  `SCHED_NAME` varchar(120) NOT NULL,  `TRIGGER_NAME` varchar(200) NOT NULL,  `TRIGGER_GROUP` varchar(200) NOT NULL,  `CRON_EXPRESSION` varchar(120) NOT NULL,  `TIME_ZONE_ID` varchar(80) DEFAULT NULL,  PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`),  CONSTRAINT `QRTZ_CRON_TRIGGERS_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Table structure for qrtz_fired_triggers-- ----------------------------DROP TABLE IF EXISTS `qrtz_fired_triggers`;CREATE TABLE `qrtz_fired_triggers` (  `SCHED_NAME` varchar(120) NOT NULL,  `ENTRY_ID` varchar(95) NOT NULL,  `TRIGGER_NAME` varchar(200) NOT NULL,  `TRIGGER_GROUP` varchar(200) NOT NULL,  `INSTANCE_NAME` varchar(200) NOT NULL,  `FIRED_TIME` bigint(13) NOT NULL,  `SCHED_TIME` bigint(13) NOT NULL,  `PRIORITY` int(11) NOT NULL,  `STATE` varchar(16) NOT NULL,  `JOB_NAME` varchar(200) DEFAULT NULL,  `JOB_GROUP` varchar(200) DEFAULT NULL,  `IS_NONCONCURRENT` varchar(1) DEFAULT NULL,  `REQUESTS_RECOVERY` varchar(1) DEFAULT NULL,  PRIMARY KEY (`SCHED_NAME`,`ENTRY_ID`),  KEY `IDX_QRTZ_FT_TRIG_INST_NAME` (`SCHED_NAME`,`INSTANCE_NAME`),  KEY `IDX_QRTZ_FT_INST_JOB_REQ_RCVRY` (`SCHED_NAME`,`INSTANCE_NAME`,`REQUESTS_RECOVERY`),  KEY `IDX_QRTZ_FT_J_G` (`SCHED_NAME`,`JOB_NAME`,`JOB_GROUP`),  KEY `IDX_QRTZ_FT_JG` (`SCHED_NAME`,`JOB_GROUP`),  KEY `IDX_QRTZ_FT_T_G` (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`),  KEY `IDX_QRTZ_FT_TG` (`SCHED_NAME`,`TRIGGER_GROUP`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Table structure for qrtz_job_details-- ----------------------------DROP TABLE IF EXISTS `qrtz_job_details`;CREATE TABLE `qrtz_job_details` (  `SCHED_NAME` varchar(120) NOT NULL,  `JOB_NAME` varchar(200) NOT NULL,  `JOB_GROUP` varchar(200) NOT NULL,  `DESCRIPTION` varchar(250) DEFAULT NULL,  `JOB_CLASS_NAME` varchar(250) NOT NULL,  `IS_DURABLE` varchar(1) NOT NULL,  `IS_NONCONCURRENT` varchar(1) NOT NULL,  `IS_UPDATE_DATA` varchar(1) NOT NULL,  `REQUESTS_RECOVERY` varchar(1) NOT NULL,  `JOB_DATA` blob,  PRIMARY KEY (`SCHED_NAME`,`JOB_NAME`,`JOB_GROUP`),  KEY `IDX_QRTZ_J_REQ_RECOVERY` (`SCHED_NAME`,`REQUESTS_RECOVERY`),  KEY `IDX_QRTZ_J_GRP` (`SCHED_NAME`,`JOB_GROUP`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Table structure for qrtz_locks-- ----------------------------DROP TABLE IF EXISTS `qrtz_locks`;CREATE TABLE `qrtz_locks` (  `SCHED_NAME` varchar(120) NOT NULL,  `LOCK_NAME` varchar(40) NOT NULL,  PRIMARY KEY (`SCHED_NAME`,`LOCK_NAME`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Table structure for qrtz_paused_trigger_grps-- ----------------------------DROP TABLE IF EXISTS `qrtz_paused_trigger_grps`;CREATE TABLE `qrtz_paused_trigger_grps` (  `SCHED_NAME` varchar(120) NOT NULL,  `TRIGGER_GROUP` varchar(200) NOT NULL,  PRIMARY KEY (`SCHED_NAME`,`TRIGGER_GROUP`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Table structure for qrtz_scheduler_state-- ----------------------------DROP TABLE IF EXISTS `qrtz_scheduler_state`;CREATE TABLE `qrtz_scheduler_state` (  `SCHED_NAME` varchar(120) NOT NULL,  `INSTANCE_NAME` varchar(200) NOT NULL,  `LAST_CHECKIN_TIME` bigint(13) NOT NULL,  `CHECKIN_INTERVAL` bigint(13) NOT NULL,  PRIMARY KEY (`SCHED_NAME`,`INSTANCE_NAME`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Table structure for qrtz_simple_triggers-- ----------------------------DROP TABLE IF EXISTS `qrtz_simple_triggers`;CREATE TABLE `qrtz_simple_triggers` (  `SCHED_NAME` varchar(120) NOT NULL,  `TRIGGER_NAME` varchar(200) NOT NULL,  `TRIGGER_GROUP` varchar(200) NOT NULL,  `REPEAT_COUNT` bigint(7) NOT NULL,  `REPEAT_INTERVAL` bigint(12) NOT NULL,  `TIMES_TRIGGERED` bigint(10) NOT NULL,  PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`),  CONSTRAINT `QRTZ_SIMPLE_TRIGGERS_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Table structure for qrtz_simprop_triggers-- ----------------------------DROP TABLE IF EXISTS `qrtz_simprop_triggers`;CREATE TABLE `qrtz_simprop_triggers` (  `SCHED_NAME` varchar(120) NOT NULL,  `TRIGGER_NAME` varchar(200) NOT NULL,  `TRIGGER_GROUP` varchar(200) NOT NULL,  `STR_PROP_1` varchar(512) DEFAULT NULL,  `STR_PROP_2` varchar(512) DEFAULT NULL,  `STR_PROP_3` varchar(512) DEFAULT NULL,  `INT_PROP_1` int(11) DEFAULT NULL,  `INT_PROP_2` int(11) DEFAULT NULL,  `LONG_PROP_1` bigint(20) DEFAULT NULL,  `LONG_PROP_2` bigint(20) DEFAULT NULL,  `DEC_PROP_1` decimal(13,4) DEFAULT NULL,  `DEC_PROP_2` decimal(13,4) DEFAULT NULL,  `BOOL_PROP_1` varchar(1) DEFAULT NULL,  `BOOL_PROP_2` varchar(1) DEFAULT NULL,  PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`),  CONSTRAINT `QRTZ_SIMPROP_TRIGGERS_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Table structure for qrtz_triggers-- ----------------------------DROP TABLE IF EXISTS `qrtz_triggers`;CREATE TABLE `qrtz_triggers` (  `SCHED_NAME` varchar(120) NOT NULL,  `TRIGGER_NAME` varchar(200) NOT NULL,  `TRIGGER_GROUP` varchar(200) NOT NULL,  `JOB_NAME` varchar(200) NOT NULL,  `JOB_GROUP` varchar(200) NOT NULL,  `DESCRIPTION` varchar(250) DEFAULT NULL,  `NEXT_FIRE_TIME` bigint(13) DEFAULT NULL,  `PREV_FIRE_TIME` bigint(13) DEFAULT NULL,  `PRIORITY` int(11) DEFAULT NULL,  `TRIGGER_STATE` varchar(16) NOT NULL,  `TRIGGER_TYPE` varchar(8) NOT NULL,  `START_TIME` bigint(13) NOT NULL,  `END_TIME` bigint(13) DEFAULT NULL,  `CALENDAR_NAME` varchar(200) DEFAULT NULL,  `MISFIRE_INSTR` smallint(2) DEFAULT NULL,  `JOB_DATA` blob,  PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`),  KEY `IDX_QRTZ_T_J` (`SCHED_NAME`,`JOB_NAME`,`JOB_GROUP`),  KEY `IDX_QRTZ_T_JG` (`SCHED_NAME`,`JOB_GROUP`),  KEY `IDX_QRTZ_T_C` (`SCHED_NAME`,`CALENDAR_NAME`),  KEY `IDX_QRTZ_T_G` (`SCHED_NAME`,`TRIGGER_GROUP`),  KEY `IDX_QRTZ_T_STATE` (`SCHED_NAME`,`TRIGGER_STATE`),  KEY `IDX_QRTZ_T_N_STATE` (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`,`TRIGGER_STATE`),  KEY `IDX_QRTZ_T_N_G_STATE` (`SCHED_NAME`,`TRIGGER_GROUP`,`TRIGGER_STATE`),  KEY `IDX_QRTZ_T_NEXT_FIRE_TIME` (`SCHED_NAME`,`NEXT_FIRE_TIME`),  KEY `IDX_QRTZ_T_NFT_ST` (`SCHED_NAME`,`TRIGGER_STATE`,`NEXT_FIRE_TIME`),  KEY `IDX_QRTZ_T_NFT_MISFIRE` (`SCHED_NAME`,`MISFIRE_INSTR`,`NEXT_FIRE_TIME`),  KEY `IDX_QRTZ_T_NFT_ST_MISFIRE` (`SCHED_NAME`,`MISFIRE_INSTR`,`NEXT_FIRE_TIME`,`TRIGGER_STATE`),  KEY `IDX_QRTZ_T_NFT_ST_MISFIRE_GRP` (`SCHED_NAME`,`MISFIRE_INSTR`,`NEXT_FIRE_TIME`,`TRIGGER_GROUP`,`TRIGGER_STATE`),  CONSTRAINT `QRTZ_TRIGGERS_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) REFERENCES `qrtz_job_details` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

阅读全文
0 0
原创粉丝点击