SpringBoot + Quartz + Maven + MySql dynamically scheduled task

  1.Quartz be imported packages, Maven configuration

  org.quartz-scheduler

  quartz

  2.2.3

  org.quartz-scheduler

  quartz-jobs

  2.2.3

  2.Quartz need to use table

  DROP TABLE IF EXISTS qrtz_fired_triggers;

  DROP TABLE IF EXISTS qrtz_paused_trigger_grps;

  DROP TABLE IF EXISTS qrtz_scheduler_state;

  DROP TABLE IF EXISTS qrtz_locks;

  DROP TABLE IF EXISTS qrtz_simple_triggers;

  DROP TABLE IF EXISTS qrtz_simprop_triggers;

  DROP TABLE IF EXISTS qrtz_cron_triggers;

  DROP TABLE IF EXISTS qrtz_blob_triggers;

  DROP TABLE IF EXISTS qrtz_triggers;

  DROP TABLE IF EXISTS qrtz_job_details;

  DROP TABLE IF EXISTS qrtz_calendars;

  Detailed information is stored for each configured Job - The #

  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) 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 NULL,

  PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)

  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

  Information storage configured Trigger - The #

  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) NULL,

  NEXT_FIRE_TIME BIGINT(13) NULL,

  PREV_FIRE_TIME BIGINT(13) NULL,

  PRIORITY INTEGER NULL,

  TRIGGER_STATE VARCHAR(16) NOT NULL,

  TRIGGER_TYPE VARCHAR(8) NOT NULL,

  START_TIME BIGINT(13) NOT NULL,

  END_TIME BIGINT(13) NULL,

  CALENDAR_NAME VARCHAR(200) NULL,

  MISFIRE_INSTR SMALLINT(2) NULL,

  JOB_DATA BLOB NULL,

  PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),

  FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)

  REFERENCES qrtz_job_details(SCHED_NAME,JOB_NAME,JOB_GROUP)

  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

  # - stored in the Trigger simple, including the number of repetitions, spacing, and number of times has contacted the

  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),

  FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)

  REFERENCES qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)

  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

  # - storage Cron Trigger, including Cron expressions, and time zone information

  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),

  PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),

  FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)

  REFERENCES qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)

  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

  # - stored in the Trigger simple, including the number of repetitions, spacing, and number of times has contacted the

  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) NULL,

  STR_PROP_2 VARCHAR(512) NULL,

  STR_PROP_3 VARCHAR(512) NULL,

  INT_PROP_1 INT NULL,

  INT_PROP_2 INT NULL,

  LONG_PROP_1 BIGINT NULL,

  LONG_PROP_2 BIGINT NULL,

  DEC_PROP_1 NUMERIC(13,4) NULL,

  DEC_PROP_2 NUMERIC(13,4) NULL,

  BOOL_PROP_1 VARCHAR(1) NULL,

  BOOL_PROP_2 VARCHAR(1) NULL,

  PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),

  FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)

  REFERENCES qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)

  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

  # - Trigger type is stored as a Blob

  # - (Quartz for users to create their own custom Trigger type using JDBC, JobStore do not know how to store instances of time)

  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 NULL,

  PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),

  INDEX (SCHED_NAME,TRIGGER_NAME, TRIGGER_GROUP),

  FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)

  REFERENCES qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)

  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

  # - to Calendar Blob type of information stored Quartz

  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 ;

  Information storage group paused Trigger - #

  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 ;

  Execution state information is stored information related to Trigger has been triggered, and the associated Job - #

  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 INTEGER NOT NULL,

  STATE VARCHAR(16) NOT NULL,

  JOB_NAME VARCHAR(200) NULL,

  JOB_GROUP VARCHAR(200) NULL,

  IS_NONCONCURRENT VARCHAR(1) NULL,

  REQUESTS_RECOVERY VARCHAR(1) NULL,

  PRIMARY KEY (SCHED_NAME,ENTRY_ID)

  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

  # - stored in a small amount of state information related Scheduler, Scheduler and other examples (if it is used in a cluster)

  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 ;

  # - pessimistic locking information storage program (if using a pessimistic locking)

  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 ;

  CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY ON qrtz_job_details(SCHED_NAME,REQUESTS_RECOVERY);

  CREATE INDEX IDX_QRTZ_J_GRP ON qrtz_job_details(SCHED_NAME,JOB_GROUP);

  CREATE INDEX IDX_QRTZ_T_J ON qrtz_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP);

  CREATE INDEX IDX_QRTZ_T_JG ON qrtz_triggers(SCHED_NAME,JOB_GROUP);

  CREATE INDEX IDX_QRTZ_T_C ON qrtz_triggers(SCHED_NAME,CALENDAR_NAME);

  CREATE INDEX IDX_QRTZ_T_G ON qrtz_triggers(SCHED_NAME,TRIGGER_GROUP);

  CREATE INDEX IDX_QRTZ_T_STATE ON qrtz_triggers(SCHED_NAME,TRIGGER_STATE);

  CREATE INDEX IDX_QRTZ_T_N_STATE ON qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE);

  CREATE INDEX IDX_QRTZ_T_N_G_STATE ON qrtz_triggers(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE);

  CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON qrtz_triggers(SCHED_NAME,NEXT_FIRE_TIME);

  CREATE INDEX IDX_QRTZ_T_NFT_ST ON qrtz_triggers(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME);

  CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME);

  CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE);

  CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE);

  CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME);

  CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY);

  CREATE INDEX IDX_QRTZ_FT_J_G ON qrtz_fired_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP);

  CREATE INDEX IDX_QRTZ_FT_JG ON qrtz_fired_triggers(SCHED_NAME,JOB_GROUP);

  CREATE INDEX IDX_QRTZ_FT_T_G ON qrtz_fired_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);

  CREATE INDEX IDX_QRTZ_FT_TG ON qrtz_fired_triggers(SCHED_NAME,TRIGGER_GROUP);

  commit;

  Configuring 3.Quartz need to use (quartz.properties)

  #quartz cluster configuration

  # ===========================================================================

  # Configure Main Scheduler Properties scheduler properties

  # ===========================================================================

  # Dispatch identification name each instance in the cluster must use the same name

  org.quartz.scheduler.instanceName=DefaultQuartzScheduler

  #ID set to automatically obtain each must be different

  org.quartz.scheduler.instanceid=AUTO

  #============================================================================

  # Configure ThreadPool

  #============================================================================

  # Thread pool implementation class (general use SimpleThreadPool can meet almost all the needs of users)

  org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool

  # Specify the number of threads, at least one (non-default) (typically set to direct an integer of 1-100 appropriate)

  org.quartz.threadPool.threadCount = 25

  # Set the priority of the thread (up to java.lang.Thread.MAX_PRIORITY 10, minimum Thread.MIN_PRIORITY 1, the default is 5)

  org.quartz.threadPool.threadPriority = 5

  #============================================================================

  # Configure JobStore

  #============================================================================

  Save time information # Default value 60 seconds

  org.quartz.jobStore.misfireThreshold = 60000

  # Allocate storage for the database persistence

  org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

  # Proxy class database, the database meet most general org.quartz.impl.jdbcjobstore.StdJDBCDelegate

  org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate

  Whether #JobDataMaps are of type String

  org.quartz.jobStore.useProperties = false

  # Database alias taken lightly

  org.quartz.jobStore.dataSource = myDS

  # Prefix table, the default QRTZ_

  org.quartz.jobStore.tablePrefix = QRTZ_

  # Whether to join the cluster

  org.quartz.jobStore.isClustered = true

  # Schedule instance failure check interval

  org.quartz.jobStore.clusterCheckinInterval = 20000

  #============================================================================

  # Configure Datasources

  #============================================================================

  # Database Engine

  org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver

  #Database linkage

  org.quartz.dataSource.myDS.URL = jdbc:mysql://localhost:3306/testdb?characterEncoding=utf8&allowMultiQueries=true&useSSL=false&autoReconnect=true

  # Database users

  org.quartz.dataSource.myDS.user = root

  # Database Password

  org.quartz.dataSource.myDS.password = root

  # Allow maximum connection

  org.quartz.dataSource.myDS.maxConnections = 5

  # Verification query sql, can not be provided

  org.quartz.dataSource.myDS.validationQuery=select 0 from dual

  4.Quartz task factory class (TaskJobFactory)

  @Component

  public class TaskJobFactory extends AdaptableJobFactory {

  @Autowired

  AutowireCapableBeanFactory capableBeanFactory;

  @Override

  protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {

  // call the parent class method

  Object jobInstance = super.createJobInstance(bundle);

  // implanting

  capableBeanFactory.autowireBean(jobInstance);

  return jobInstance;

  }

  }

  5.Quartz configuration class (QuartzConfigurer)

  @Configuration

  public class QuartzConfigurer {

  @Autowired

  DataSource dataSource;

  @Autowired

  TaskJobFactory jobFactory;

  @Bean(name = "SchedulerFactory")

  public SchedulerFactoryBean schedulerFactoryBean() throws IOException {

  // Get configuration properties

  PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();

  propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties"));

  // Properties quartz.properties is read and then injected initialize the object

  propertiesFactoryBean.afterPropertiesSet();

  // Create SchedulerFactoryBean

  SchedulerFactoryBean factory = new SchedulerFactoryBean();

  factory.setQuartzProperties(propertiesFactoryBean.getObject());

  factory.setJobFactory(jobFactory);

  return factory;

  }

  /*

  * Get Scheduler instance by SchedulerFactoryBean

  */

  @Bean(name = "scheduler")

  public Scheduler scheduler() throws IOException {

  return schedulerFactoryBean().getScheduler();

  }

  }

  6.Quartz action class (QuartzJobManager)

  @Component

  public class QuartzJobManager {

  private static final Logger logger = LoggerFactory.getLogger(QuartzJobManager.class);

  private static QuartzJobManager jobUtil;

  @Autowired

  private Scheduler scheduler;

  public QuartzJobManager() {

  logger.info("init jobUtil");

  jobUtil = this;

  }

  public static QuartzJobManager getInstance() {

  logger.info("return JobCreateUtil");

  return QuartzJobManager.jobUtil;

  }

  /**

  * Create a job

  *

  * @Param clazz task class

  * @Param jobName Task Name

  * @Param jobGroupName task where the group name

  * @Param cronExpression cron expression

  */

  public void addJob(Class clazz, String jobName, String jobGroupName, String cronExpression) {

  addJob(clazz, jobName, jobGroupName, cronExpression, null);

  }

  /**

  * Create a job, you can pass parameters

  *

  * @Param clazz task class

  * @Param jobName Task Name

  * @Param jobGroupName task where the group name

  * @Param cronExpression cron expression

  * @Param argMap map form parameters

  */

  public void addJob(Class clazz, String jobName, String jobGroupName, String cronExpression, Map argMap) {

  try {

  // start the scheduler

  scheduler.start();

  // build job information

  JobDetail jobDetail = JobBuilder.newJob(((Job) clazz.newInstance()).getClass()).withIdentity(jobName, jobGroupName).build();

  // dispatcher expression builder (ie task execution time)

  CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression);

  // according to the new cronExpression expression to build a new trigger

  CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(jobName, jobGroupName).withSchedule(scheduleBuilder).build();

  // get JobDataMap, write data

  if (argMap != null) {

  trigger.getJobDataMap (). putAll (argMap);

  }

  scheduler.scheduleJob(jobDetail, trigger);

  } catch (Exception e) {

  e.printStackTrace ();

  }

  }

  /**

  * Pause job

  *

  * @Param jobName Task Name

  * @Param jobGroupName task where the group name

  */

  public void pauseJob(String jobName, String jobGroupName) {

  try {

  scheduler.pauseJob(JobKey.jobKey(jobName, jobGroupName));

  } catch (SchedulerException e) {

  e.printStackTrace ();

  }

  }

  /**

  * Restore job

  *

  * @Param jobName Task Name

  * @Param jobGroupName task where the group name

  */

  public void resumeJob(String jobName, String jobGroupName) {

  try {

  scheduler.resumeJob(JobKey.jobKey(jobName, jobGroupName));

  } catch (SchedulerException e) {

  e.printStackTrace ();

  }

  }

  /**

  * Job updates, just update frequency

  *

  * @Param jobName Task Name

  * @Param jobGroupName task where the group name

  * @Param cronExpression cron expression

  */

  public void updateJob(String jobName, String jobGroupName, String cronExpression) {

  updateJob(jobName, jobGroupName, cronExpression, null);

  }

  /**

  * Job updates, update frequency and parameters

  *

  * @Param jobName Task Name

  * @Param jobGroupName task where the group name

  * @Param cronExpression cron expression

  * @Param argMap parameters

  */

  public void updateJob(String jobName, String jobGroupName, String cronExpression, Map argMap) {

  try {

  TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroupName);

  // expression builder schedule

  CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression);

  CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);

  // according to the new cronExpression expression rebuild trigger

  trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();

  // modify the map

  if (argMap != null) {

  trigger.getJobDataMap (). putAll (argMap);

  } Wuxi ××× hospital http://www.bhnkyixue.com/

  // reset according to the new trigger job execution

  scheduler.rescheduleJob(triggerKey, trigger);

  } catch (Exception e) {

  e.printStackTrace ();

  }

  }

  /**

  * Job update, the update only updates the parameters

  *

  * @Param jobName Task Name

  * @Param jobGroupName task where the group name

  * @Param argMap parameters

  */

  public void updateJob(String jobName, String jobGroupName, Map argMap) {

  try {

  TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroupName);

  CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);

  // modify the map

  trigger.getJobDataMap (). putAll (argMap);

  // reset according to the new trigger job execution

  scheduler.rescheduleJob(triggerKey, trigger);

  } catch (Exception e) {

  e.printStackTrace ();

  }

  }

  /**

  * Job Delete

  *

  * @Param jobName Task Name

  * @Param jobGroupName task where the group name

  */

  public void deleteJob(String jobName, String jobGroupName) {

  try {

  scheduler.pauseTrigger(TriggerKey.triggerKey(jobName, jobGroupName));

  scheduler.unscheduleJob(TriggerKey.triggerKey(jobName, jobGroupName));

  scheduler.deleteJob(JobKey.jobKey(jobName, jobGroupName));

  } catch (Exception e) {

  e.printStackTrace ();

  }

  }

  /**

  * Start all scheduled tasks

  */

  public void startAllJobs() {

  try {

  scheduler.start();

  } catch (Exception e) {

  throw new RuntimeException(e);

  }

  }

  /**

  * Turn off all regular tasks

  */

  public void shutdownAllJobs() {

  try {

  if (!scheduler.isShutdown()) {

  scheduler.shutdown();

  }

  } catch (Exception e) {

  throw new RuntimeException(e);

  }

  }

  /**

  * Get a list of all tasks

  *

  * @return

  */

  public List> getAllJob() {

  GroupMatcher matcher = GroupMatcher.anyJobGroup();

  List> jobList = new ArrayList<>();

  Set jobKeys = null;

  try {

  jobKeys = scheduler.getJobKeys(matcher);

  for (JobKey jobKey : jobKeys) {

  List triggers = scheduler.getTriggersOfJob(jobKey);

  for (Trigger trigger : triggers) {

  Map job = new HashMap<>();

  job.put("jobName", jobKey.getName());

  job.put("jobGroupName", jobKey.getGroup());

  job.put("trigger", trigger.getKey());

  Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());

  job.put("jobStatus", triggerState.name());

  if (trigger instanceof CronTrigger) {

  CronTrigger cronTrigger = (CronTrigger) trigger;

  String cronExpression = cronTrigger.getCronExpression();

  job.put("cronExpression", cronExpression);

  }

  jobList.add(job);

  }

  }

  } catch (SchedulerException e) {

  e.printStackTrace ();

  }

  return jobList;

  }

  }

  7. Test class (TestQuartz)

  @Component

  public class TestQuartz implements Job {

  @Override

  public void execute(JobExecutionContext context) throws JobExecutionException {

  // Get the name of the task

  String taskName = context.getJobDetail().getKey().getName();

  // Process to perform tasks after the business

  }

  }

  8. Test class (JobController)

  @Controller

  @RequestMapping("/job")

  public class JobController {

  @Autowired

  QuartzJobManager quartzJobManager;

  @GetMapping("/add")

  public void add(HttpServletRequest request) {

  //mission name

  String name = request.getParameter("name");

  // Task Force Name

  String groupName = "task";

  // cron expression

  String cron = "0 0/1 * * * ?";

  // need to carry the mission parameters

  Map map = new HashMap<>();

  map.put("name", "张三");

  map.put("sex", "0");

  quartzJobManager.addJob(TestQuartz.class, name, groupName, cron, map);

  }

  @GetMapping("/del")

  public void del(HttpServletRequest request) {

  String name = request.getParameter("name");

  String groupName = "task";

  quartzJobManager.deleteJob(name, groupName);

  }

  }

  This is all the source code a Quartz dynamic task required test which wrote only two, the other can go test, a simple Quartz test case build better, you can also combine business projects directly on this basis scene to expand.


Guess you like

Origin blog.51cto.com/14335413/2425553