中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現SpringBoot+Quartz+Maven+MySql動態定時任務

發布時間:2020-05-15 16:47:51 來源:網絡 閱讀:525 作者:三月 欄目:MySQL數據庫

下面一起來了解下如何實現SpringBoot+Quartz+Maven+MySql動態定時任務,相信大家看完肯定會受益匪淺,文字在精不在多,希望如何實現SpringBoot+Quartz+Maven+MySql動態定時任務這篇短內容是你想要的。

  1.Quartz需要導入的包,Maven配置

  org.quartz-scheduler

  quartz

  2.2.3

  org.quartz-scheduler

  quartz-jobs

  2.2.3

  2.Quartz需要用到的表

  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;

  #-- 存儲每一個已配置的 Job 的詳細信息

  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 ;

  #--存儲已配置的 Trigger 的信息

  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 ;

  #-- 存儲簡單的 Trigger,包括重復次數,間隔,以及已觸的次數

  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 ;

  #-- 存儲 Cron Trigger,包括 Cron 表達式和時區信息

  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 ;

  #-- 存儲簡單的 Trigger,包括重復次數,間隔,以及已觸的次數

  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 作為 Blob 類型存儲

  #-- (用于 Quartz 用戶用 JDBC 創建他們自己定制的 Trigger 類型,JobStore并不知道如何存儲實例的時候)

  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 ;

  #-- 以 Blob 類型存儲 Quartz 的 Calendar 信息

  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 ;

  #-- 存儲已暫停的 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 ;

  #-- 存儲與已觸發的 Trigger 相關的狀態信息,以及相聯 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 ;

  #-- 存儲少量的有關 Scheduler 的狀態信息,和別的 Scheduler 實例(假如是用于一個集群中)

  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 ;

  #-- 存儲程序的悲觀鎖的信息(假如使用了悲觀鎖)

  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;

  3.Quartz需要用到的配置(quartz.properties)

  #quartz集群配置

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

  # Configure Main Scheduler Properties 調度器屬性

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

  #調度標識名 集群中每一個實例都必須使用相同的名稱

  org.quartz.scheduler.instanceName=DefaultQuartzScheduler

  #ID設置為自動獲取 每一個必須不同

  org.quartz.scheduler.instanceid=AUTO

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

  # Configure ThreadPool

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

  #線程池的實現類(一般使用SimpleThreadPool即可滿足幾乎所有用戶的需求)

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

  #指定線程數,至少為1(無默認值)(一般設置為1-100直接的整數合適)

  org.quartz.threadPool.threadCount = 25

  #設置線程的優先級(最大為java.lang.Thread.MAX_PRIORITY 10,最小為Thread.MIN_PRIORITY 1,默認為5)

  org.quartz.threadPool.threadPriority = 5

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

  # Configure JobStore

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

  # 信息保存時間 默認值60秒

  org.quartz.jobStore.misfireThreshold = 60000

  #數據保存方式為數據庫持久化

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

  #數據庫代理類,一般org.quartz.impl.jdbcjobstore.StdJDBCDelegate可以滿足大部分數據庫

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

  #JobDataMaps是否都為String類型

  org.quartz.jobStore.useProperties = false

  #數據庫別名 隨便取

  org.quartz.jobStore.dataSource = myDS

  #表的前綴,默認QRTZ_

  org.quartz.jobStore.tablePrefix = QRTZ_

  #是否加入集群

  org.quartz.jobStore.isClustered = true

  #調度實例失效的檢查時間間隔

  org.quartz.jobStore.clusterCheckinInterval = 20000

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

  # Configure Datasources

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

  #數據庫引擎

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

  #數據庫連接

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

  #數據庫用戶

  org.quartz.dataSource.myDS.user = root

  #數據庫密碼

  org.quartz.dataSource.myDS.password = root

  #允許最大連接

  org.quartz.dataSource.myDS.maxConnections = 5

  #驗證查詢sql,可以不設置

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

  4.Quartz任務工廠類(TaskJobFactory)

  @Component

  public class TaskJobFactory extends AdaptableJobFactory {

  @Autowired

  AutowireCapableBeanFactory capableBeanFactory;

  @Override

  protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {

  //調用父類的方法

  Object jobInstance = super.createJobInstance(bundle);

  //進行注入

  capableBeanFactory.autowireBean(jobInstance);

  return jobInstance;

  }

  }

  5.Quartz配置類(QuartzConfigurer)

  @Configuration

  public class QuartzConfigurer {

  @Autowired

  DataSource dataSource;

  @Autowired

  TaskJobFactory jobFactory;

  @Bean(name = "SchedulerFactory")

  public SchedulerFactoryBean schedulerFactoryBean() throws IOException {

  //獲取配置屬性

  PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();

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

  //在quartz.properties中的屬性被讀取并注入后再初始化對象

  propertiesFactoryBean.afterPropertiesSet();

  //創建SchedulerFactoryBean

  SchedulerFactoryBean factory = new SchedulerFactoryBean();

  factory.setQuartzProperties(propertiesFactoryBean.getObject());

  factory.setJobFactory(jobFactory);

  return factory;

  }

  /*

  * 通過SchedulerFactoryBean獲取Scheduler的實例

  */

  @Bean(name = "scheduler")

  public Scheduler scheduler() throws IOException {

  return schedulerFactoryBean().getScheduler();

  }

  }

  6.Quartz操作類(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;

  }

  /**

  * 創建job

  *

  * @param clazz 任務類

  * @param jobName 任務名稱

  * @param jobGroupName 任務所在組名稱

  * @param cronExpression cron表達式

  */

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

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

  }

  /**

  * 創建job,可傳參

  *

  * @param clazz 任務類

  * @param jobName 任務名稱

  * @param jobGroupName 任務所在組名稱

  * @param cronExpression cron表達式

  * @param argMap map形式參數

  */

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

  try {

  // 啟動調度器

  scheduler.start();

  //構建job信息

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

  //表達式調度構建器(即任務執行的時間)

  CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression);

  //按新的cronExpression表達式構建一個新的trigger

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

  //獲得JobDataMap,寫入數據

  if (argMap != null) {

  trigger.getJobDataMap().putAll(argMap);

  }

  scheduler.scheduleJob(jobDetail, trigger);

  } catch (Exception e) {

  e.printStackTrace();

  }

  }

  /**

  * 暫停job

  *

  * @param jobName 任務名稱

  * @param jobGroupName 任務所在組名稱

  */

  public void pauseJob(String jobName, String jobGroupName) {

  try {

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

  } catch (SchedulerException e) {

  e.printStackTrace();

  }

  }

  /**

  * 恢復job

  *

  * @param jobName 任務名稱

  * @param jobGroupName 任務所在組名稱

  */

  public void resumeJob(String jobName, String jobGroupName) {

  try {

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

  } catch (SchedulerException e) {

  e.printStackTrace();

  }

  }

  /**

  * job 更新,只更新頻率

  *

  * @param jobName 任務名稱

  * @param jobGroupName 任務所在組名稱

  * @param cronExpression cron表達式

  */

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

  updateJob(jobName, jobGroupName, cronExpression, null);

  }

  /**

  * job 更新,更新頻率和參數

  *

  * @param jobName 任務名稱

  * @param jobGroupName 任務所在組名稱

  * @param cronExpression cron表達式

  * @param argMap 參數

  */

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

  try {

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

  // 表達式調度構建器

  CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression);

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

  // 按新的cronExpression表達式重新構建trigger

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

  //修改map

  if (argMap != null) {

  trigger.getJobDataMap().putAll(argMap);

  }無錫×××醫院 http://www.bhnkyixue.com/

  // 按新的trigger重新設置job執行

  scheduler.rescheduleJob(triggerKey, trigger);

  } catch (Exception e) {

  e.printStackTrace();

  }

  }

  /**

  * job 更新,只更新更新參數

  *

  * @param jobName 任務名稱

  * @param jobGroupName 任務所在組名稱

  * @param argMap 參數

  */

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

  try {

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

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

  //修改map

  trigger.getJobDataMap().putAll(argMap);

  // 按新的trigger重新設置job執行

  scheduler.rescheduleJob(triggerKey, trigger);

  } catch (Exception e) {

  e.printStackTrace();

  }

  }

  /**

  * job 刪除

  *

  * @param jobName 任務名稱

  * @param jobGroupName 任務所在組名稱

  */

  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();

  }

  }

  /**

  * 啟動所有定時任務

  */

  public void startAllJobs() {

  try {

  scheduler.start();

  } catch (Exception e) {

  throw new RuntimeException(e);

  }

  }

  /**

  * 關閉所有定時任務

  */

  public void shutdownAllJobs() {

  try {

  if (!scheduler.isShutdown()) {

  scheduler.shutdown();

  }

  } catch (Exception e) {

  throw new RuntimeException(e);

  }

  }

  /**

  * 獲取所有任務列表

  *

  * @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.測試類(TestQuartz)

  @Component

  public class TestQuartz implements Job {

  @Override

  public void execute(JobExecutionContext context) throws JobExecutionException {

  //獲取任務名

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

  //處理執行任務之后的業務

  }

  }

  8.測試類(JobController)

  @Controller

  @RequestMapping("/job")

  public class JobController {

  @Autowired

  QuartzJobManager quartzJobManager;

  @GetMapping("/add")

  public void add(HttpServletRequest request) {

  //任務名稱

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

  //任務組名稱

  String groupName = "task";

  //cron表達式

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

  //需要給任務攜帶的參數

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

  }

  }

  這是一個Quartz動態任務需要的所有源碼,測試里面只寫了2個,其他的可以自己去測試,一個簡單的Quartz的測試案例就搭建好了,你也可以直接在這個基礎上結合項目的業務場景去擴展。

看完如何實現SpringBoot+Quartz+Maven+MySql動態定時任務這篇文章后,很多讀者朋友肯定會想要了解更多的相關內容,如需獲取更多的行業信息,可以關注我們的行業資訊欄目。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丰原市| 塘沽区| 社旗县| 曲松县| 加查县| 永丰县| 长治市| 台东县| 鄱阳县| 库尔勒市| 将乐县| 宿松县| 秦安县| 四子王旗| 杂多县| 达拉特旗| 北海市| 民乐县| 新晃| 唐山市| 肇州县| 偃师市| 荣昌县| 筠连县| 嘉黎县| 百色市| 凤台县| 通榆县| 永城市| 锡林浩特市| 麻阳| 玛曲县| 连平县| 文登市| 宣化县| 香港| 抚宁县| 怀化市| 喀喇沁旗| 德令哈市| 右玉县|