sql脚本
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0 ;
DROP TABLE IF EXISTS ` qrtz_blob_triggers` ;
CREATE TABLE ` qrtz_blob_triggers` (
` SCHED_NAME` varchar ( 120 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` TRIGGER_NAME` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` TRIGGER_GROUP` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` BLOB_DATA` blob NULL ,
PRIMARY KEY ( ` SCHED_NAME` , ` TRIGGER_NAME` , ` TRIGGER_GROUP` ) USING BTREE ,
INDEX ` SCHED_NAME` ( ` SCHED_NAME` , ` TRIGGER_NAME` , ` TRIGGER_GROUP` ) USING BTREE ,
CONSTRAINT ` qrtz_blob_triggers_ibfk_1` FOREIGN KEY ( ` SCHED_NAME` , ` TRIGGER_NAME` , ` TRIGGER_GROUP` ) REFERENCES ` qrtz_triggers` ( ` SCHED_NAME` , ` TRIGGER_NAME` , ` TRIGGER_GROUP` ) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS ` qrtz_calendars` ;
CREATE TABLE ` qrtz_calendars` (
` SCHED_NAME` varchar ( 120 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` CALENDAR_NAME` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` CALENDAR` blob NOT NULL ,
PRIMARY KEY ( ` SCHED_NAME` , ` CALENDAR_NAME` ) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS ` qrtz_cron_triggers` ;
CREATE TABLE ` qrtz_cron_triggers` (
` SCHED_NAME` varchar ( 120 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` TRIGGER_NAME` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` TRIGGER_GROUP` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` CRON_EXPRESSION` varchar ( 120 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` TIME_ZONE_ID` varchar ( 80 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
PRIMARY KEY ( ` SCHED_NAME` , ` TRIGGER_NAME` , ` TRIGGER_GROUP` ) USING BTREE ,
CONSTRAINT ` qrtz_cron_triggers_ibfk_1` FOREIGN KEY ( ` SCHED_NAME` , ` TRIGGER_NAME` , ` TRIGGER_GROUP` ) REFERENCES ` qrtz_triggers` ( ` SCHED_NAME` , ` TRIGGER_NAME` , ` TRIGGER_GROUP` ) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS ` qrtz_fired_triggers` ;
CREATE TABLE ` qrtz_fired_triggers` (
` SCHED_NAME` varchar ( 120 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` ENTRY_ID` varchar ( 95 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` TRIGGER_NAME` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` TRIGGER_GROUP` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` INSTANCE_NAME` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` FIRED_TIME` bigint ( 13 ) NOT NULL ,
` SCHED_TIME` bigint ( 13 ) NOT NULL ,
` PRIORITY` int ( 11 ) NOT NULL ,
` STATE` varchar ( 16 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` JOB_NAME` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
` JOB_GROUP` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
` IS_NONCONCURRENT` varchar ( 1 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
` REQUESTS_RECOVERY` varchar ( 1 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
PRIMARY KEY ( ` SCHED_NAME` , ` ENTRY_ID` ) USING BTREE ,
INDEX ` IDX_QRTZ_FT_TRIG_INST_NAME` ( ` SCHED_NAME` , ` INSTANCE_NAME` ) USING BTREE ,
INDEX ` IDX_QRTZ_FT_INST_JOB_REQ_RCVRY` ( ` SCHED_NAME` , ` INSTANCE_NAME` , ` REQUESTS_RECOVERY` ) USING BTREE ,
INDEX ` IDX_QRTZ_FT_J_G` ( ` SCHED_NAME` , ` JOB_NAME` , ` JOB_GROUP` ) USING BTREE ,
INDEX ` IDX_QRTZ_FT_JG` ( ` SCHED_NAME` , ` JOB_GROUP` ) USING BTREE ,
INDEX ` IDX_QRTZ_FT_T_G` ( ` SCHED_NAME` , ` TRIGGER_NAME` , ` TRIGGER_GROUP` ) USING BTREE ,
INDEX ` IDX_QRTZ_FT_TG` ( ` SCHED_NAME` , ` TRIGGER_GROUP` ) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS ` qrtz_job_details` ;
CREATE TABLE ` qrtz_job_details` (
` SCHED_NAME` varchar ( 120 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` JOB_NAME` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` JOB_GROUP` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` DESCRIPTION` varchar ( 250 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
` JOB_CLASS_NAME` varchar ( 250 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` IS_DURABLE` varchar ( 1 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` IS_NONCONCURRENT` varchar ( 1 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` IS_UPDATE_DATA` varchar ( 1 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` REQUESTS_RECOVERY` varchar ( 1 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` JOB_DATA` blob NULL ,
PRIMARY KEY ( ` SCHED_NAME` , ` JOB_NAME` , ` JOB_GROUP` ) USING BTREE ,
INDEX ` IDX_QRTZ_J_REQ_RECOVERY` ( ` SCHED_NAME` , ` REQUESTS_RECOVERY` ) USING BTREE ,
INDEX ` IDX_QRTZ_J_GRP` ( ` SCHED_NAME` , ` JOB_GROUP` ) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS ` qrtz_locks` ;
CREATE TABLE ` qrtz_locks` (
` SCHED_NAME` varchar ( 120 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` LOCK_NAME` varchar ( 40 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
PRIMARY KEY ( ` SCHED_NAME` , ` LOCK_NAME` ) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS ` qrtz_paused_trigger_grps` ;
CREATE TABLE ` qrtz_paused_trigger_grps` (
` SCHED_NAME` varchar ( 120 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` TRIGGER_GROUP` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
PRIMARY KEY ( ` SCHED_NAME` , ` TRIGGER_GROUP` ) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS ` qrtz_scheduler_state` ;
CREATE TABLE ` qrtz_scheduler_state` (
` SCHED_NAME` varchar ( 120 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` INSTANCE_NAME` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` LAST_CHECKIN_TIME` bigint ( 13 ) NOT NULL ,
` CHECKIN_INTERVAL` bigint ( 13 ) NOT NULL ,
PRIMARY KEY ( ` SCHED_NAME` , ` INSTANCE_NAME` ) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS ` qrtz_simple_triggers` ;
CREATE TABLE ` qrtz_simple_triggers` (
` SCHED_NAME` varchar ( 120 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` TRIGGER_NAME` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` TRIGGER_GROUP` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci 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` ) USING BTREE ,
CONSTRAINT ` qrtz_simple_triggers_ibfk_1` FOREIGN KEY ( ` SCHED_NAME` , ` TRIGGER_NAME` , ` TRIGGER_GROUP` ) REFERENCES ` qrtz_triggers` ( ` SCHED_NAME` , ` TRIGGER_NAME` , ` TRIGGER_GROUP` ) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS ` qrtz_simprop_triggers` ;
CREATE TABLE ` qrtz_simprop_triggers` (
` SCHED_NAME` varchar ( 120 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` TRIGGER_NAME` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` TRIGGER_GROUP` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` STR_PROP_1` varchar ( 512 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
` STR_PROP_2` varchar ( 512 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
` STR_PROP_3` varchar ( 512 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
` INT_PROP_1` int ( 11 ) NULL DEFAULT NULL ,
` INT_PROP_2` int ( 11 ) NULL DEFAULT NULL ,
` LONG_PROP_1` bigint ( 20 ) NULL DEFAULT NULL ,
` LONG_PROP_2` bigint ( 20 ) NULL DEFAULT NULL ,
` DEC_PROP_1` decimal ( 13 , 4 ) NULL DEFAULT NULL ,
` DEC_PROP_2` decimal ( 13 , 4 ) NULL DEFAULT NULL ,
` BOOL_PROP_1` varchar ( 1 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
` BOOL_PROP_2` varchar ( 1 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
PRIMARY KEY ( ` SCHED_NAME` , ` TRIGGER_NAME` , ` TRIGGER_GROUP` ) USING BTREE ,
CONSTRAINT ` qrtz_simprop_triggers_ibfk_1` FOREIGN KEY ( ` SCHED_NAME` , ` TRIGGER_NAME` , ` TRIGGER_GROUP` ) REFERENCES ` qrtz_triggers` ( ` SCHED_NAME` , ` TRIGGER_NAME` , ` TRIGGER_GROUP` ) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS ` qrtz_triggers` ;
CREATE TABLE ` qrtz_triggers` (
` SCHED_NAME` varchar ( 120 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` TRIGGER_NAME` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` TRIGGER_GROUP` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` JOB_NAME` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` JOB_GROUP` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` DESCRIPTION` varchar ( 250 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
` NEXT_FIRE_TIME` bigint ( 13 ) NULL DEFAULT NULL ,
` PREV_FIRE_TIME` bigint ( 13 ) NULL DEFAULT NULL ,
` PRIORITY` int ( 11 ) NULL DEFAULT NULL ,
` TRIGGER_STATE` varchar ( 16 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` TRIGGER_TYPE` varchar ( 8 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
` START_TIME` bigint ( 13 ) NOT NULL ,
` END_TIME` bigint ( 13 ) NULL DEFAULT NULL ,
` CALENDAR_NAME` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
` MISFIRE_INSTR` smallint ( 2 ) NULL DEFAULT NULL ,
` JOB_DATA` blob NULL ,
PRIMARY KEY ( ` SCHED_NAME` , ` TRIGGER_NAME` , ` TRIGGER_GROUP` ) USING BTREE ,
INDEX ` IDX_QRTZ_T_J` ( ` SCHED_NAME` , ` JOB_NAME` , ` JOB_GROUP` ) USING BTREE ,
INDEX ` IDX_QRTZ_T_JG` ( ` SCHED_NAME` , ` JOB_GROUP` ) USING BTREE ,
INDEX ` IDX_QRTZ_T_C` ( ` SCHED_NAME` , ` CALENDAR_NAME` ) USING BTREE ,
INDEX ` IDX_QRTZ_T_G` ( ` SCHED_NAME` , ` TRIGGER_GROUP` ) USING BTREE ,
INDEX ` IDX_QRTZ_T_STATE` ( ` SCHED_NAME` , ` TRIGGER_STATE` ) USING BTREE ,
INDEX ` IDX_QRTZ_T_N_STATE` ( ` SCHED_NAME` , ` TRIGGER_NAME` , ` TRIGGER_GROUP` , ` TRIGGER_STATE` ) USING BTREE ,
INDEX ` IDX_QRTZ_T_N_G_STATE` ( ` SCHED_NAME` , ` TRIGGER_GROUP` , ` TRIGGER_STATE` ) USING BTREE ,
INDEX ` IDX_QRTZ_T_NEXT_FIRE_TIME` ( ` SCHED_NAME` , ` NEXT_FIRE_TIME` ) USING BTREE ,
INDEX ` IDX_QRTZ_T_NFT_ST` ( ` SCHED_NAME` , ` TRIGGER_STATE` , ` NEXT_FIRE_TIME` ) USING BTREE ,
INDEX ` IDX_QRTZ_T_NFT_MISFIRE` ( ` SCHED_NAME` , ` MISFIRE_INSTR` , ` NEXT_FIRE_TIME` ) USING BTREE ,
INDEX ` IDX_QRTZ_T_NFT_ST_MISFIRE` ( ` SCHED_NAME` , ` MISFIRE_INSTR` , ` NEXT_FIRE_TIME` , ` TRIGGER_STATE` ) USING BTREE ,
INDEX ` IDX_QRTZ_T_NFT_ST_MISFIRE_GRP` ( ` SCHED_NAME` , ` MISFIRE_INSTR` , ` NEXT_FIRE_TIME` , ` TRIGGER_GROUP` , ` TRIGGER_STATE` ) USING BTREE ,
CONSTRAINT ` qrtz_triggers_ibfk_1` FOREIGN KEY ( ` SCHED_NAME` , ` JOB_NAME` , ` JOB_GROUP` ) REFERENCES ` qrtz_job_details` ( ` SCHED_NAME` , ` JOB_NAME` , ` JOB_GROUP` ) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS ` schedule_job` ;
CREATE TABLE ` schedule_job` (
` id` bigint ( 20 ) NOT NULL AUTO_INCREMENT COMMENT '任务id' ,
` bean_name` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'spring bean名称' ,
` method_name` varchar ( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '方法名称' ,
` params` varchar ( 2000 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '参数' ,
` cron_expression` varchar ( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'cron表达式' ,
` status ` tinyint ( 4 ) NULL DEFAULT NULL COMMENT '是否正在运行 0:否,1:是' ,
` remark` varchar ( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注' ,
` create_date` datetime ( 0 ) NULL DEFAULT NULL COMMENT '创建时间' ,
` create_by` bigint ( 11 ) NULL DEFAULT NULL COMMENT '创建人' ,
` update_date` datetime ( 0 ) NULL DEFAULT NULL COMMENT '修改时间' ,
` update_by` bigint ( 11 ) NULL DEFAULT NULL COMMENT '修改人' ,
` del_flag` tinyint ( 1 ) NULL DEFAULT NULL COMMENT '是否删除 0:否,1:是' ,
PRIMARY KEY ( ` id` ) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '定时任务' ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS ` schedule_job_log` ;
CREATE TABLE ` schedule_job_log` (
` id` bigint ( 20 ) NOT NULL AUTO_INCREMENT COMMENT '任务日志id' ,
` job_id` bigint ( 20 ) NOT NULL COMMENT '任务id' ,
` bean_name` varchar ( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'spring bean名称' ,
` method_name` varchar ( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '方法名称' ,
` params` varchar ( 2000 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '参数' ,
` status ` tinyint ( 4 ) NOT NULL COMMENT '任务状态,是否成功 0:否,1:是' ,
` error` varchar ( 2000 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '失败信息' ,
` times` int ( 11 ) NOT NULL COMMENT '耗时(单位:毫秒)' ,
` create_date` datetime ( 0 ) NULL DEFAULT NULL COMMENT '创建时间' ,
` create_by` bigint ( 11 ) NULL DEFAULT NULL COMMENT '创建人' ,
` update_date` datetime ( 0 ) NULL DEFAULT NULL COMMENT '修改时间' ,
` update_by` bigint ( 11 ) NULL DEFAULT NULL COMMENT '修改人' ,
` del_flag` tinyint ( 1 ) NULL DEFAULT NULL COMMENT '是否删除 0:否,1:是' ,
PRIMARY KEY ( ` id` ) USING BTREE ,
INDEX ` job_id` ( ` job_id` ) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 172 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '定时任务日志' ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1 ;
依赖
springboot 版本号为 2.5.6
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
配置
spring :
quartz :
properties :
org :
quartz :
scheduler :
instanceName : schedulerName
instanceId : AUTO
jobStore :
class : org.quartz.impl.jdbcjobstore.JobStoreTX
driverDelegateClass : org.quartz.impl.jdbcjobstore.StdJDBCDelegate
tablePrefix : QRTZ_
isClustered : true
clusterCheckinInterval : 10000
useProperties : false
threadPool :
class : org.quartz.simpl.SimpleThreadPool
threadCount : 10
threadPriority : 5
threadsInheritContextClassLoaderOfInitializingThread : true
job-store-type : jdbc
代码
ScheduleUtils
package com. sun. financial. modules. job. utils ;
import com. alibaba. fastjson. JSON;
import com. sun. financial. common. enums. YES_OR_NO;
import com. sun. financial. common. exception. FinancialException ;
import com. sun. financial. modules. job. entity. ScheduleJobEntity ;
import lombok. extern. slf4j. Slf4j ;
import org. quartz. * ;
@Slf4j
public class ScheduleUtils {
private final static String JOB_NAME = "TASK_" ;
public static TriggerKey getTriggerKey ( Long jobId) {
return TriggerKey . triggerKey ( JOB_NAME + jobId) ;
}
public static JobKey getJobKey ( Long jobId) {
return JobKey . jobKey ( JOB_NAME + jobId) ;
}
public static CronTrigger getCronTrigger ( Scheduler scheduler, Long jobId) {
try {
return ( CronTrigger ) scheduler. getTrigger ( getTriggerKey ( jobId) ) ;
} catch ( SchedulerException e) {
throw new FinancialException ( "获取定时任务CronTrigger出现异常" ) ;
}
}
public static void createScheduleJob ( Scheduler scheduler, ScheduleJobEntity scheduleJob) {
try {
JobDetail jobDetail = JobBuilder . newJob ( ScheduleJob . class ) . withIdentity ( getJobKey ( scheduleJob. getId ( ) ) ) . build ( ) ;
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder . cronSchedule ( scheduleJob. getCronExpression ( ) )
. withMisfireHandlingInstructionDoNothing ( ) ;
CronTrigger trigger = TriggerBuilder . newTrigger ( ) . withIdentity ( getTriggerKey ( scheduleJob. getId ( ) ) ) . withSchedule ( scheduleBuilder) . build ( ) ;
jobDetail. getJobDataMap ( ) . put ( ScheduleJobEntity . JOB_PARAM_KEY, JSON. toJSONString ( scheduleJob) ) ;
scheduler. scheduleJob ( jobDetail, trigger) ;
if ( String . valueOf ( YES_OR_NO. NO. getValue ( ) ) . equals ( scheduleJob. getStatus ( ) . toString ( ) ) ) {
pauseJob ( scheduler, scheduleJob. getId ( ) ) ;
}
} catch ( SchedulerException e) {
throw new FinancialException ( "创建定时任务失败" ) ;
}
}
public static void updateScheduleJob ( Scheduler scheduler, ScheduleJobEntity scheduleJob) {
try {
TriggerKey triggerKey = getTriggerKey ( scheduleJob. getId ( ) ) ;
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder . cronSchedule ( scheduleJob. getCronExpression ( ) )
. withMisfireHandlingInstructionDoNothing ( ) ;
CronTrigger trigger = getCronTrigger ( scheduler, scheduleJob. getId ( ) ) ;
trigger = trigger. getTriggerBuilder ( ) . withIdentity ( triggerKey) . withSchedule ( scheduleBuilder) . build ( ) ;
trigger. getJobDataMap ( ) . put ( ScheduleJobEntity . JOB_PARAM_KEY, JSON. toJSONString ( scheduleJob) ) ;
scheduler. rescheduleJob ( triggerKey, trigger) ;
if ( String . valueOf ( YES_OR_NO. NO. getValue ( ) ) . equals ( scheduleJob. getStatus ( ) . toString ( ) ) ) {
pauseJob ( scheduler, scheduleJob. getId ( ) ) ;
}
} catch ( SchedulerException e) {
throw new FinancialException ( "更新定时任务失败" ) ;
}
}
public static void run ( Scheduler scheduler, ScheduleJobEntity scheduleJob) {
try {
JobDataMap dataMap = new JobDataMap ( ) ;
dataMap. put ( ScheduleJobEntity . JOB_PARAM_KEY, scheduleJob) ;
scheduler. triggerJob ( getJobKey ( scheduleJob. getId ( ) ) , dataMap) ;
} catch ( SchedulerException e) {
throw new FinancialException ( "立即执行定时任务失败" ) ;
}
}
public static void pauseJob ( Scheduler scheduler, Long jobId) {
try {
scheduler. pauseJob ( getJobKey ( jobId) ) ;
} catch ( SchedulerException e) {
throw new FinancialException ( "暂停定时任务失败" ) ;
}
}
public static void resumeJob ( Scheduler scheduler, Long jobId) {
try {
scheduler. resumeJob ( getJobKey ( jobId) ) ;
} catch ( SchedulerException e) {
throw new FinancialException ( "暂停定时任务失败" ) ;
}
}
public static void deleteScheduleJob ( Scheduler scheduler, Long jobId) {
try {
scheduler. deleteJob ( getJobKey ( jobId) ) ;
} catch ( SchedulerException e) {
throw new FinancialException ( "删除定时任务失败" ) ;
}
}
}
ScheduleJob
package com. sun. financial. modules. job. utils ;
import com. alibaba. fastjson. JSONObject ;
import com. sun. financial. common. config. SpringConfig ;
import com. sun. financial. common. enums. YES_OR_NO;
import com. sun. financial. modules. job. entity. ScheduleJobEntity ;
import com. sun. financial. modules. job. entity. ScheduleJobLogEntity ;
import com. sun. financial. modules. job. service. ScheduleJobLogService ;
import cn. hutool. core. util. StrUtil ;
import org. quartz. JobExecutionContext ;
import org. quartz. JobExecutionException ;
import org. slf4j. Logger ;
import org. slf4j. LoggerFactory ;
import org. springframework. scheduling. quartz. QuartzJobBean ;
import java. lang. reflect. Method ;
public class ScheduleJob extends QuartzJobBean {
private Logger logger = LoggerFactory . getLogger ( getClass ( ) ) ;
@Override
protected void executeInternal ( JobExecutionContext context) throws JobExecutionException {
String obj = context. getMergedJobDataMap ( ) . get ( ScheduleJobEntity . JOB_PARAM_KEY) . toString ( ) ;
ScheduleJobEntity scheduleJob = JSONObject . parseObject ( obj, ScheduleJobEntity . class ) ;
ScheduleJobLogService scheduleJobLogService = ( ScheduleJobLogService ) SpringConfig . getBean ( "scheduleJobLogService" ) ;
ScheduleJobLogEntity scheduleJobLog = new ScheduleJobLogEntity ( ) ;
scheduleJobLog. setJobId ( scheduleJob. getId ( ) ) ;
scheduleJobLog. setBeanName ( scheduleJob. getBeanName ( ) ) ;
scheduleJobLog. setMethodName ( scheduleJob. getMethodName ( ) ) ;
scheduleJobLog. setParams ( scheduleJob. getParams ( ) ) ;
long startTime = System . currentTimeMillis ( ) ;
try {
logger. debug ( "任务准备执行,任务ID:" + scheduleJob. getId ( ) ) ;
Object target = SpringConfig . getBean ( scheduleJob. getBeanName ( ) ) ;
Method method = target. getClass ( ) . getDeclaredMethod ( scheduleJob. getMethodName ( ) , String . class ) ;
method. invoke ( target, scheduleJob. getParams ( ) ) ;
long times = System . currentTimeMillis ( ) - startTime;
scheduleJobLog. setTimes ( ( int ) times) ;
scheduleJobLog. setStatus ( YES_OR_NO. YES. getValue ( ) ) ;
logger. debug ( "任务执行完毕,任务ID:" + scheduleJob. getId ( ) + " 总共耗时:" + times + "毫秒" ) ;
} catch ( Exception e) {
logger. error ( "任务执行失败,任务ID:" + scheduleJob. getId ( ) , e) ;
long times = System . currentTimeMillis ( ) - startTime;
scheduleJobLog. setTimes ( ( int ) times) ;
scheduleJobLog. setStatus ( YES_OR_NO. NO. getValue ( ) ) ;
scheduleJobLog. setError ( StrUtil . sub ( e. toString ( ) , 0 , 2000 ) ) ;
} finally {
scheduleJobLogService. save ( scheduleJobLog) ;
}
}
}
ScheduleConfig
package com. sun. financial. modules. job. config ;
import cn. hutool. core. collection. CollectionUtil ;
import com. baomidou. mybatisplus. core. conditions. query. LambdaQueryWrapper ;
import com. sun. financial. common. enums. YES_OR_NO;
import com. sun. financial. modules. job. entity. ScheduleJobEntity ;
import com. sun. financial. modules. job. service. ScheduleJobService ;
import com. sun. financial. modules. job. utils. ScheduleUtils ;
import org. quartz. CronTrigger ;
import org. quartz. Scheduler ;
import org. springframework. beans. factory. annotation. Autowired ;
import org. springframework. context. annotation. Configuration ;
import javax. annotation. PostConstruct ;
import java. util. List ;
@Configuration
public class ScheduleConfig {
@Autowired
private Scheduler scheduler;
@Autowired
private ScheduleJobService scheduleJobService;
@PostConstruct
public void init ( ) {
LambdaQueryWrapper < ScheduleJobEntity > queryWrapper = new LambdaQueryWrapper < > ( ) ;
queryWrapper. eq ( ScheduleJobEntity :: getDelFlag , YES_OR_NO. NO. getByteValue ( ) ) ;
List < ScheduleJobEntity > scheduleJobList = scheduleJobService. list ( queryWrapper) ;
if ( CollectionUtil . isNotEmpty ( scheduleJobList) ) {
for ( ScheduleJobEntity scheduleJob : scheduleJobList) {
CronTrigger cronTrigger = ScheduleUtils . getCronTrigger ( scheduler, scheduleJob. getId ( ) ) ;
if ( cronTrigger == null ) {
ScheduleUtils . createScheduleJob ( scheduler, scheduleJob) ;
} else {
ScheduleUtils . updateScheduleJob ( scheduler, scheduleJob) ;
}
}
}
}
}
TestTask
package com. sun. financial. modules. job. task ;
import lombok. extern. slf4j. Slf4j ;
import org. slf4j. Logger ;
import org. slf4j. LoggerFactory ;
import org. springframework. stereotype. Component ;
@Slf4j
@Component
public class TestTask {
public void run ( String params) {
log. info ( "TestTask run 定时任务正在执行,参数为:{}" , params) ;
}
public void run1 ( String params) {
log. info ( "TestTask run1 定时任务正在执行,参数为:{}" , params) ;
}
}
SpringConfig
package com. sun. financial. common. config ;
import org. springframework. beans. BeansException ;
import org. springframework. context. ApplicationContext ;
import org. springframework. context. ApplicationContextAware ;
import org. springframework. context. annotation. Configuration ;
@Configuration
public class SpringConfig implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext ( ApplicationContext applicationContext) throws BeansException {
if ( SpringConfig . applicationContext == null ) {
SpringConfig . applicationContext = applicationContext;
}
}
public static ApplicationContext getApplicationContext ( ) {
return applicationContext;
}
public static Object getBean ( String name) {
return getApplicationContext ( ) . getBean ( name) ;
}
public static < T > T getBean ( Class < T > clazz) {
return getApplicationContext ( ) . getBean ( clazz) ;
}
public static < T > T getBean ( String name, Class < T > clazz) {
return getApplicationContext ( ) . getBean ( name, clazz) ;
}
}
FinancialException
package com. sun. financial. common. exception ;
import com. sun. financial. common. utils. ResultCode ;
public class FinancialException extends RuntimeException {
private static final long serialVersionUID = 1L ;
private String msg;
private int code;
public FinancialException ( String msg) {
super ( msg) ;
this . code = ResultCode . ERROR. getCode ( ) ;
this . msg = msg;
}
public String getMsg ( ) {
return msg;
}
public void setMsg ( String msg) {
this . msg = msg;
}
public int getCode ( ) {
return code;
}
public void setCode ( int code) {
this . code = code;
}
}