From 125b91e6b081244ef345869256b2fe4dcf6c1264 Mon Sep 17 00:00:00 2001
From: zhizhi wu <2377881365@qq.com>
Date: Wed, 30 Jun 2021 18:21:14 +0800
Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/resources/application-dev.properties | 6 +-
.../src/main/resources/application.properties | 2 +-
pom.xml | 2 +-
scheduler/pom.xml | 27 +-
.../scheduler/SchedulerApplication.java | 15 +
.../ccsens/scheduler/api/DebugController.java | 31 ++
.../ccsens/scheduler/api/JobController.java | 71 ++++
.../scheduler/bean/dto/QuartzJobModule.java | 73 ++++
.../scheduler/config/SchedulerConfig.java | 64 +++
.../scheduler/service/TestJobDetail.java | 22 +
.../com/ccsens/scheduler/util/CodeEnum.java | 10 +-
.../com/ccsens/scheduler/util/Constant.java | 6 +
.../ccsens/scheduler/util/QuartzJobUtil.java | 375 ++++++++++++++++++
.../src/main/resources/application-dev.yml | 49 +++
14 files changed, 725 insertions(+), 28 deletions(-)
create mode 100644 scheduler/src/main/java/com/ccsens/scheduler/api/DebugController.java
create mode 100644 scheduler/src/main/java/com/ccsens/scheduler/api/JobController.java
create mode 100644 scheduler/src/main/java/com/ccsens/scheduler/bean/dto/QuartzJobModule.java
create mode 100644 scheduler/src/main/java/com/ccsens/scheduler/config/SchedulerConfig.java
create mode 100644 scheduler/src/main/java/com/ccsens/scheduler/service/TestJobDetail.java
create mode 100644 scheduler/src/main/java/com/ccsens/scheduler/util/QuartzJobUtil.java
diff --git a/ccmq/src/main/resources/application-dev.properties b/ccmq/src/main/resources/application-dev.properties
index f14eb93..54ed864 100644
--- a/ccmq/src/main/resources/application-dev.properties
+++ b/ccmq/src/main/resources/application-dev.properties
@@ -22,10 +22,10 @@ spring.redis.jedis.pool.min-idle=0
# RabbitMQ配置信息
#spring.rabbitmq.host=49.233.89.188
#spring.rabbitmq.host=192.168.0.99
-spring.rabbitmq.host=127.0.0.1
+spring.rabbitmq.host=49.233.89.188
spring.rabbitmq.port=5672
-spring.rabbitmq.username=guest
-spring.rabbitmq.password=guest
+spring.rabbitmq.username=admin
+spring.rabbitmq.password=111111
# spring.rabbitmq.listener.simple.acknowledge-mode=manual
# MongoDB配置信息
diff --git a/ccmq/src/main/resources/application.properties b/ccmq/src/main/resources/application.properties
index dd8b329..47021f7 100644
--- a/ccmq/src/main/resources/application.properties
+++ b/ccmq/src/main/resources/application.properties
@@ -1,5 +1,5 @@
# 选择开发环境{dev|test|prod}
-spring.profiles.active=test
+spring.profiles.active=dev
# 设置应用名
spring.application.name=tall-message
diff --git a/pom.xml b/pom.xml
index 4899498..fcee785 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
eureka
ccmq
histrixmonitor
-
+ scheduler
com.ccsens
common
diff --git a/scheduler/pom.xml b/scheduler/pom.xml
index 37bc202..4d3d2e6 100644
--- a/scheduler/pom.xml
+++ b/scheduler/pom.xml
@@ -12,8 +12,12 @@
scheduler
-
+
+ org.springframework.boot
+ spring-boot-starter-quartz
+
+
-
- org.springframework.boot
- spring-boot-starter-data-redis
-
+ -->
@@ -36,16 +35,16 @@
-
+
+ <!– 鑷姩閲嶈繛–>
com.spring4all
mongodb-plus-spring-boot-starter
1.0.0.RELEASE
-
+ -->
@@ -55,11 +54,11 @@
-
+
@@ -103,11 +102,11 @@
-
+
com.jayway.jsonpath
diff --git a/scheduler/src/main/java/com/ccsens/scheduler/SchedulerApplication.java b/scheduler/src/main/java/com/ccsens/scheduler/SchedulerApplication.java
index 9c95632..45729b3 100644
--- a/scheduler/src/main/java/com/ccsens/scheduler/SchedulerApplication.java
+++ b/scheduler/src/main/java/com/ccsens/scheduler/SchedulerApplication.java
@@ -1,9 +1,24 @@
package com.ccsens.scheduler;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.web.servlet.ServletComponentScan;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
/**
* @description:
* @author: whj
* @time: 2021/2/20 17:39
*/
+@EnableScheduling
+@MapperScan(basePackages = {"com.ccsens.scheduler.persist.*"})
+@ServletComponentScan
+@EnableAsync
+@SpringBootApplication(scanBasePackages = "com.ccsens.scheduler")
public class SchedulerApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(SchedulerApplication.class, args);
+ }
}
diff --git a/scheduler/src/main/java/com/ccsens/scheduler/api/DebugController.java b/scheduler/src/main/java/com/ccsens/scheduler/api/DebugController.java
new file mode 100644
index 0000000..ed855e9
--- /dev/null
+++ b/scheduler/src/main/java/com/ccsens/scheduler/api/DebugController.java
@@ -0,0 +1,31 @@
+package com.ccsens.scheduler.api;
+
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import com.ccsens.scheduler.util.JsonResponse;
+
+@Api(tags = "DEBUG" , description = "DebugController | ")
+@RestController
+@RequestMapping("/debug")
+@Slf4j
+public class DebugController {
+
+ @ApiOperation(value = "/娴嬭瘯",notes = "")
+ @ApiImplicitParams({
+ })
+ @RequestMapping(value="",method = RequestMethod.GET,produces = {"application/json;charset=UTF-8"})
+ public JsonResponse debug(HttpServletRequest request) throws Exception {
+
+ return JsonResponse.newInstance().ok("娴嬭瘯");
+ }
+
+
+}
diff --git a/scheduler/src/main/java/com/ccsens/scheduler/api/JobController.java b/scheduler/src/main/java/com/ccsens/scheduler/api/JobController.java
new file mode 100644
index 0000000..091f3f7
--- /dev/null
+++ b/scheduler/src/main/java/com/ccsens/scheduler/api/JobController.java
@@ -0,0 +1,71 @@
+package com.ccsens.scheduler.api;
+
+import com.ccsens.scheduler.bean.dto.QuartzJobModule;
+import com.ccsens.scheduler.util.JsonResponse;
+import com.ccsens.scheduler.util.QuartzJobUtil;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * @description:
+ * @author: whj
+ * @time: 2021/6/30 16:26
+ */
+@Slf4j
+@RestController
+@RequestMapping("/job")
+public class JobController {
+
+ @Resource
+ private QuartzJobUtil quartzJobUtil;
+
+ @ApiOperation(value = "/娣诲姞浠诲姟",notes = "")
+ @ApiImplicitParams({
+ })
+ @RequestMapping(value="add",method = RequestMethod.POST,produces = {"application/json;charset=UTF-8"})
+ public JsonResponse add(@ApiParam @Validated @RequestBody QuartzJobModule job) {
+ quartzJobUtil.addJob(job);
+ return JsonResponse.newInstance().ok();
+ }
+
+
+ @ApiOperation(value = "/淇敼浠诲姟鏃堕棿",notes = "")
+ @ApiImplicitParams({
+ })
+ @RequestMapping(value="modifyTime",method = RequestMethod.POST,produces = {"application/json;charset=UTF-8"})
+ public JsonResponse modifyTime(@ApiParam @Validated @RequestBody QuartzJobModule job) {
+ quartzJobUtil.modifyJobTime(job.getJobName(), job.getJobGroupName(), job.getCron());
+ return JsonResponse.newInstance().ok();
+ }
+
+
+ @RequestMapping(value="pause",method = RequestMethod.POST,produces = {"application/json;charset=UTF-8"})
+ public JsonResponse pause(String jobName) {
+ log.info("鍋滄浠诲姟");
+ quartzJobUtil.pauseJob(jobName);
+ return JsonResponse.newInstance().ok();
+ }
+
+ @PostMapping("/resume")
+ @ResponseBody
+ public JsonResponse resume(String jobName) {
+ log.info("鎭㈠浠诲姟");
+ quartzJobUtil.removeJob(jobName);
+ return JsonResponse.newInstance().ok();
+
+ }
+
+ @PostMapping("/remove")
+ @ResponseBody
+ public JsonResponse remove(String jobName) {
+ log.info("绉婚櫎浠诲姟");
+ quartzJobUtil.removeJob(jobName);
+ return JsonResponse.newInstance().ok();
+ }
+}
diff --git a/scheduler/src/main/java/com/ccsens/scheduler/bean/dto/QuartzJobModule.java b/scheduler/src/main/java/com/ccsens/scheduler/bean/dto/QuartzJobModule.java
new file mode 100644
index 0000000..2a6c38c
--- /dev/null
+++ b/scheduler/src/main/java/com/ccsens/scheduler/bean/dto/QuartzJobModule.java
@@ -0,0 +1,73 @@
+package com.ccsens.scheduler.bean.dto;
+
+import cn.hutool.core.util.StrUtil;
+import com.ccsens.scheduler.util.Constant;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.quartz.Job;
+import org.quartz.JobDataMap;
+import org.quartz.JobExecutionContext;
+import org.springframework.util.ClassUtils;
+
+import java.util.Date;
+
+/**
+ * @description:
+ * @author: whj
+ * @time: 2021/6/30 16:00
+ */
+@Data
+public class QuartzJobModule {
+ /**
+ * 瑙﹀彂鍣ㄥ紑濮嬫椂闂
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date startTime;
+ /**
+ * 瑙﹀彂鍣ㄧ粨鏉熸椂闂
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date endTime;
+ /**
+ * job鍚嶇О
+ */
+ private String jobName;
+ /**
+ * job缁勫悕
+ */
+ private String jobGroupName = Constant.Quartz.QZ_JOB_GROUP_NAME;
+ /**
+ * 瀹氭椂鍣ㄥ悕绉
+ */
+ private String triggerName;
+ /**
+ * 瀹氭椂鍣ㄧ粍鍚
+ */
+ private String triggerGroupName = Constant.Quartz.QZ_TRIGGER_GROUP_NAME;
+ /**
+ * 鎵ц瀹氭椂浠诲姟鐨勫叿浣撴搷浣
+ */
+ private String jobClass;
+ /**
+ * cron琛ㄨ揪寮
+ */
+ private String cron;
+ /**
+ * job鐨勯檮鍔犱俊鎭
+ */
+ private JobDataMap jobDataMap = new JobDataMap();
+ /**
+ * 鏍¢獙
+ * @return
+ */
+ public boolean verify(){
+ return !(StrUtil.isEmpty(jobName)
+ || StrUtil.isEmpty(jobGroupName)
+ || StrUtil.isEmpty(triggerName)
+ || StrUtil.isEmpty(triggerGroupName)
+ || StrUtil.isEmpty(cron)
+ || !ClassUtils.hasMethod(Job.class, "execute", JobExecutionContext.class)
+ );
+ }
+
+}
diff --git a/scheduler/src/main/java/com/ccsens/scheduler/config/SchedulerConfig.java b/scheduler/src/main/java/com/ccsens/scheduler/config/SchedulerConfig.java
new file mode 100644
index 0000000..745a507
--- /dev/null
+++ b/scheduler/src/main/java/com/ccsens/scheduler/config/SchedulerConfig.java
@@ -0,0 +1,64 @@
+package com.ccsens.scheduler.config;
+
+import cn.hutool.core.io.resource.ClassPathResource;
+import org.quartz.Scheduler;
+import org.quartz.ee.servlet.QuartzInitializerListener;
+import org.springframework.beans.factory.config.PropertiesFactoryBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.quartz.SchedulerFactoryBean;
+
+import java.io.IOException;
+import java.util.Properties;
+
+/**
+ * @description:
+ * @author: whj
+ * @time: 2021/6/30 15:48
+ */
+@Configuration
+public class SchedulerConfig {
+ /**
+ * 璇诲彇quartz.properties 鏂囦欢
+ * 灏嗗煎垵濮嬪寲
+ * @return
+ */
+ @Bean
+ public Properties quartzProperties() throws IOException {
+ PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
+ propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties"));
+ propertiesFactoryBean.afterPropertiesSet();
+ return propertiesFactoryBean.getObject();
+ }
+
+ /**
+ * 灏嗛厤缃枃浠剁殑鏁版嵁鍔犺浇鍒癝chedulerFactoryBean涓
+ * @return
+ * @throws IOException
+ */
+ @Bean
+ public SchedulerFactoryBean schedulerFactoryBean() throws IOException {
+ SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
+ schedulerFactoryBean.setQuartzProperties();
+ return schedulerFactoryBean;
+ }
+
+ /**
+ * 鍒濆鍖栫洃鍚櫒
+ * @return
+ */
+ @Bean
+ public QuartzInitializerListener executorListener(){
+ return new QuartzInitializerListener();
+ }
+
+ /**
+ * 鑾峰緱Scheduler 瀵硅薄
+ * @return
+ * @throws IOException
+ */
+ @Bean
+ public Scheduler scheduler() throws IOException {
+ return schedulerFactoryBean().getScheduler();
+ }
+}
diff --git a/scheduler/src/main/java/com/ccsens/scheduler/service/TestJobDetail.java b/scheduler/src/main/java/com/ccsens/scheduler/service/TestJobDetail.java
new file mode 100644
index 0000000..095419e
--- /dev/null
+++ b/scheduler/src/main/java/com/ccsens/scheduler/service/TestJobDetail.java
@@ -0,0 +1,22 @@
+package com.ccsens.scheduler.service;
+
+import lombok.extern.slf4j.Slf4j;
+import org.quartz.DisallowConcurrentExecution;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+
+/**
+ * @author: whj
+ * @time: 2021/6/30 16:22
+ */
+@DisallowConcurrentExecution// 绂佹骞跺彂鎵ц
+@Slf4j
+public class TestJobDetail extends QuartzJobBean {
+ @Override
+ protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
+ log.info("begin delwith batch task >>>>>>>>>>>>>>>>>>>>>>>");
+ String batchId = context.getJobDetail().getKey().getName();
+ log.info("鎵ц鐨勪换鍔d涓猴細[{}]", batchId);
+ }
+}
diff --git a/scheduler/src/main/java/com/ccsens/scheduler/util/CodeEnum.java b/scheduler/src/main/java/com/ccsens/scheduler/util/CodeEnum.java
index 4d41cd4..ac5ec87 100644
--- a/scheduler/src/main/java/com/ccsens/scheduler/util/CodeEnum.java
+++ b/scheduler/src/main/java/com/ccsens/scheduler/util/CodeEnum.java
@@ -12,16 +12,8 @@ public enum CodeEnum {
FILE_FORMAT_ERROR(1, "鏂囦欢鏍煎紡閿欒", true),
PARAM_NULL(6, "璇锋鏌ユ偍鐨勫弬鏁版槸鍚﹀~鍐欏畬鏁淬", true),
-
-
-
-
;
- public CodeEnum addMsg(String msg){
- this.msg = msg+"琛岋細"+this.msg;
- return this;
- }
public static CodeEnum getByCode(int code) {
for (CodeEnum codeEnum: CodeEnum.values()) {
if (codeEnum.getCode() == code) {
@@ -31,7 +23,7 @@ public enum CodeEnum {
return null;
}
- private CodeEnum(Integer code, String msg, boolean success) {
+ CodeEnum(Integer code, String msg, boolean success) {
this.code = code;
this.msg = msg;
this.success = success;
diff --git a/scheduler/src/main/java/com/ccsens/scheduler/util/Constant.java b/scheduler/src/main/java/com/ccsens/scheduler/util/Constant.java
index ad0853d..f9dfc83 100644
--- a/scheduler/src/main/java/com/ccsens/scheduler/util/Constant.java
+++ b/scheduler/src/main/java/com/ccsens/scheduler/util/Constant.java
@@ -26,6 +26,12 @@ public class Constant {
}
}
+ public static class Quartz {
+ public static final String QZ_JOB_GROUP_NAME = "JOB_GROUP_NAME";
+ public static final String QZ_TRIGGER_GROUP_NAME = "TRIGGER_GROUP_NAME";
+
+ }
+
diff --git a/scheduler/src/main/java/com/ccsens/scheduler/util/QuartzJobUtil.java b/scheduler/src/main/java/com/ccsens/scheduler/util/QuartzJobUtil.java
new file mode 100644
index 0000000..d8665a7
--- /dev/null
+++ b/scheduler/src/main/java/com/ccsens/scheduler/util/QuartzJobUtil.java
@@ -0,0 +1,375 @@
+package com.ccsens.scheduler.util;
+
+import com.ccsens.scheduler.bean.dto.QuartzJobModule;
+import lombok.extern.slf4j.Slf4j;
+import org.quartz.*;
+import org.quartz.impl.triggers.CronTriggerImpl;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @description:
+ * @author: whj
+ * @time: 2021/6/30 16:03
+ */
+@Slf4j
+@Component
+public class QuartzJobUtil {
+ @Resource
+ private Scheduler scheduler;
+
+ /**
+ * @Description: 娣诲姞涓涓畾鏃朵换鍔
+ * @param quartzModel
+ */
+ public void addJob(QuartzJobModule quartzModel) {
+ if (quartzModel.verify()) {
+ try {
+ JobDetail job = JobBuilder.newJob((Class extends Job>) Class.forName(quartzModel.getJobClass()))
+ .withIdentity(quartzModel.getJobName(), quartzModel.getJobGroupName())
+ .setJobData(quartzModel.getJobDataMap()).build();
+ // 琛ㄨ揪寮忚皟搴︽瀯寤哄櫒
+ CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(quartzModel.getCron());
+ // 鎸夋柊鐨刢ronExpression琛ㄨ揪寮忔瀯寤轰竴涓柊鐨則rigger
+ TriggerBuilder builder = TriggerBuilder.newTrigger()
+ .withIdentity(quartzModel.getTriggerName(), quartzModel.getTriggerGroupName());
+ if (quartzModel.getStartTime() != null) {
+ builder.startAt(quartzModel.getStartTime());
+ }
+ if (quartzModel.getEndTime() != null) {
+ builder.endAt(quartzModel.getEndTime());
+ }
+ Trigger trigger = builder.withSchedule(scheduleBuilder).build();
+ scheduler.scheduleJob(job, trigger);
+ // 鍚姩
+ if (!scheduler.isShutdown()) {
+ scheduler.start();
+ }
+ }
+ catch (Exception e) {
+ log.error("Add quartz job error, jobName = {}", quartzModel.getJobName());
+ }
+
+ }
+ else {
+ log.error("QuartzModel is invalid!");
+ }
+ }
+
+ /**
+ * @Description: 淇敼涓涓换鍔$殑瑙﹀彂鏃堕棿(浣跨敤榛樿鐨勪换鍔$粍鍚嶏紝瑙﹀彂鍣ㄥ悕锛岃Е鍙戝櫒缁勫悕)
+ * @param jobName
+ * @param cron
+ */
+ public void modifyJobTime(String jobName, String cron, Date startDate, Date endDate) {
+ TriggerKey triggerKey = TriggerKey.triggerKey(jobName, Constant.Quartz.QZ_TRIGGER_GROUP_NAME);
+
+ try {
+ CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
+ if (trigger == null) {
+ return;
+ }
+ String oldTime = trigger.getCronExpression();
+ if (!oldTime.equalsIgnoreCase(cron)) {
+ CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cron);
+ // 鎸夋柊鐨刢ronExpression琛ㄨ揪寮忛噸鏂版瀯寤簍rigger
+ trigger = trigger.getTriggerBuilder().withIdentity(triggerKey)
+ .startAt(startDate)
+ .endAt(endDate).withSchedule(scheduleBuilder).build();
+ // 鎸夋柊鐨則rigger閲嶆柊璁剧疆job鎵ц
+ scheduler.rescheduleJob(triggerKey, trigger);
+ }
+ }
+ catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * @Description:淇敼浠诲姟锛岋紙鍙互淇敼浠诲姟鍚嶏紝浠诲姟绫伙紝瑙﹀彂鏃堕棿锛
+ * 鍘熺悊锛氱Щ闄ゅ師鏉ョ殑浠诲姟锛屾坊鍔犳柊鐨勪换鍔
+ * @param oldJobName
+ * 锛氬師浠诲姟鍚
+ * @param jobName
+ * @param jobclass
+ * @param cron
+ */
+ public void modifyJob(String oldJobName, String jobName, Class jobclass, String cron) {
+ TriggerKey triggerKey = TriggerKey.triggerKey(oldJobName, Constant.Quartz.QZ_TRIGGER_GROUP_NAME);
+ JobKey jobKey = JobKey.jobKey(oldJobName, Constant.Quartz.QZ_JOB_GROUP_NAME);
+ try {
+ // 浠诲姟涓嶅瓨鍦
+ if (removeJob(oldJobName, triggerKey, jobKey)) {
+ return;
+ }
+
+ JobDetail job = JobBuilder.newJob(jobclass).withIdentity(jobName,
+ Constant.Quartz.QZ_JOB_GROUP_NAME)
+ .build();
+ // 琛ㄨ揪寮忚皟搴︽瀯寤哄櫒
+ CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cron);
+ // 鎸夋柊鐨刢ronExpression琛ㄨ揪寮忔瀯寤轰竴涓柊鐨則rigger
+ Trigger newTrigger = TriggerBuilder.newTrigger().withIdentity(jobName,
+ Constant.Quartz.QZ_TRIGGER_GROUP_NAME)
+ .withSchedule(scheduleBuilder).build();
+
+ // 浜ょ粰scheduler鍘昏皟搴
+ scheduler.scheduleJob(job, newTrigger);
+
+ // 鍚姩
+ if (!scheduler.isShutdown()) {
+ scheduler.start();
+ System.err.println("娣诲姞鏂颁换鍔:" + jobName);
+ }
+ System.err.println("淇敼浠诲姟銆" + oldJobName + "銆戜负:" + jobName);
+ }
+ catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ }
+
+ private boolean removeJob(String oldJobName, TriggerKey triggerKey, JobKey jobKey) throws SchedulerException {
+ Trigger trigger = scheduler.getTrigger(triggerKey);
+ if (trigger == null) {
+ return true;
+ }
+ // 鍋滄瑙﹀彂鍣
+ deleteJob(triggerKey, jobKey);
+ System.err.println("绉婚櫎浠诲姟:" + oldJobName);
+ return false;
+ }
+
+ /**
+ * @Description: 淇敼涓涓换鍔$殑瑙﹀彂鏃堕棿
+ * @param triggerName
+ * @param triggerGroupName
+ * @param cron
+ */
+ public void modifyJobTime(String triggerName, String triggerGroupName, String cron) {
+ TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
+ try {
+ CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
+ if (trigger == null) {
+ return;
+ }
+ String oldTime = trigger.getCronExpression();
+ if (!oldTime.equalsIgnoreCase(cron)) {
+ // trigger宸插瓨鍦紝鍒欐洿鏂扮浉搴旂殑瀹氭椂璁剧疆
+ CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cron);
+ // 鎸夋柊鐨刢ronExpression琛ㄨ揪寮忛噸鏂版瀯寤簍rigger
+ trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
+ // 鎸夋柊鐨則rigger閲嶆柊璁剧疆job鎵ц
+ scheduler.resumeTrigger(triggerKey);
+ }
+ }
+ catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * @Description 绉婚櫎涓涓换鍔(浣跨敤榛樿鐨勪换鍔$粍鍚嶏紝瑙﹀彂鍣ㄥ悕锛岃Е鍙戝櫒缁勫悕)
+ * @param jobName
+ */
+ public void removeJob(String jobName) {
+ TriggerKey triggerKey = TriggerKey.triggerKey(jobName, Constant.Quartz.QZ_TRIGGER_GROUP_NAME);
+ JobKey jobKey = JobKey.jobKey(jobName, Constant.Quartz.QZ_JOB_GROUP_NAME);
+ try {
+ Trigger trigger = (Trigger) scheduler.getTrigger(triggerKey);
+ if (trigger == null) {
+ return;
+ }
+ deleteJob(triggerKey, jobKey);
+ System.err.println("绉婚櫎浠诲姟:" + jobName);
+ }
+ catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private void deleteJob(TriggerKey triggerKey, JobKey jobKey) throws SchedulerException {
+ // 鍋滄瑙﹀彂鍣
+ scheduler.pauseTrigger(triggerKey);
+ // 绉婚櫎瑙﹀彂鍣
+ scheduler.unscheduleJob(triggerKey);
+ // 鍒犻櫎浠诲姟
+ scheduler.deleteJob(jobKey);
+ }
+
+ /**
+ * @Description: 绉婚櫎涓涓换鍔
+ * @param jobName
+ * @param jobGroupName
+ * @param triggerName
+ * @param triggerGroupName
+ */
+ public void removeJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName) {
+ TriggerKey triggerKey = TriggerKey.triggerKey(jobName, triggerGroupName);
+ JobKey jobKey = JobKey.jobKey(jobName, jobGroupName);
+ try {
+ deleteJob(triggerKey, jobKey);
+ }
+ catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * @Description:鏆傚仠涓涓换鍔(浣跨敤榛樿缁勫悕)
+ * @param jobName
+ */
+ public void pauseJob(String jobName) {
+ JobKey jobKey = JobKey.jobKey(jobName, Constant.Quartz.QZ_JOB_GROUP_NAME);
+ try {
+ scheduler.pauseJob(jobKey);
+ }
+ catch (SchedulerException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * @Description:鏆傚仠涓涓换鍔
+ * @param jobName
+ * @param jobGroupName
+ */
+ public void pauseJob(String jobName, String jobGroupName) {
+ JobKey jobKey = JobKey.jobKey(jobName, jobGroupName);
+ try {
+ scheduler.pauseJob(jobKey);
+ }
+ catch (SchedulerException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * @Description:鎭㈠涓涓换鍔(浣跨敤榛樿缁勫悕)
+ * @param jobName
+ */
+ public void resumeJob(String jobName) {
+ JobKey jobKey = JobKey.jobKey(jobName, Constant.Quartz.QZ_JOB_GROUP_NAME);
+ try {
+ scheduler.resumeJob(jobKey);
+ }
+ catch (SchedulerException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * @Description:鎭㈠涓涓换鍔
+ * @param jobName
+ * @param jobGroupName
+ */
+ public void resumeJob(String jobName, String jobGroupName) {
+ JobKey jobKey = JobKey.jobKey(jobName, jobGroupName);
+ try {
+ scheduler.resumeJob(jobKey);
+ }
+ catch (SchedulerException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * @Description:鍚姩鎵鏈夊畾鏃朵换鍔
+ */
+ public void startJobs() {
+ try {
+ scheduler.start();
+ }
+ catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * @Description 鍏抽棴鎵鏈夊畾鏃朵换鍔
+ */
+ public void shutdownJobs() {
+ try {
+ if (!scheduler.isShutdown()) {
+ scheduler.shutdown();
+ }
+ }
+ catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * @Description: 绔嬪嵆杩愯浠诲姟锛岃繖閲岀殑绔嬪嵆杩愯锛屽彧浼氳繍琛屼竴娆★紝鏂逛究娴嬭瘯鏃剁敤銆
+ * @param jobName
+ */
+ public void triggerJob(String jobName) {
+ JobKey jobKey = JobKey.jobKey(jobName, Constant.Quartz.QZ_JOB_GROUP_NAME);
+ try {
+ scheduler.triggerJob(jobKey);
+ }
+ catch (SchedulerException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * @Description: 绔嬪嵆杩愯浠诲姟锛岃繖閲岀殑绔嬪嵆杩愯锛屽彧浼氳繍琛屼竴娆★紝鏂逛究娴嬭瘯鏃剁敤銆
+ * @param jobName
+ * @param jobGroupName
+ */
+ public void triggerJob(String jobName, String jobGroupName) {
+ JobKey jobKey = JobKey.jobKey(jobName, jobGroupName);
+ try {
+ scheduler.triggerJob(jobKey);
+ }
+ catch (SchedulerException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * @Description: 鑾峰彇浠诲姟鐘舵
+ * @param jobName
+ * 瑙﹀彂鍣ㄥ悕
+ */
+ public String getTriggerState(String jobName) {
+ TriggerKey triggerKey = TriggerKey.triggerKey(jobName, Constant.Quartz.QZ_TRIGGER_GROUP_NAME);
+ String name = null;
+ try {
+ Trigger.TriggerState triggerState = scheduler.getTriggerState(triggerKey);
+ name = triggerState.name();
+ }
+ catch (SchedulerException e) {
+ e.printStackTrace();
+ }
+ return name;
+ }
+
+ /**
+ * @Description:鑾峰彇鏈杩5娆℃墽琛屾椂闂
+ * @param cron
+ */
+ public List getRecentTriggerTime(String cron) {
+ List list = new ArrayList();
+ try {
+ CronTriggerImpl cronTriggerImpl = new CronTriggerImpl();
+ cronTriggerImpl.setCronExpression(cron);
+ List dates = TriggerUtils.computeFireTimes(cronTriggerImpl, null, 5);
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
+ for (Date date : dates) {
+ list.add(dateFormat.format(date));
+ }
+ }
+ catch (ParseException e) {
+ log.error("GetRecentTriggerTime error, cron = {}", cron, e);
+ }
+ return list;
+ }
+}
diff --git a/scheduler/src/main/resources/application-dev.yml b/scheduler/src/main/resources/application-dev.yml
index 0f080a1..618d137 100644
--- a/scheduler/src/main/resources/application-dev.yml
+++ b/scheduler/src/main/resources/application-dev.yml
@@ -6,6 +6,38 @@ spring:
workerId: 1
datasource:
type: com.alibaba.druid.pool.DruidDataSource
+ quartz:
+ # dataSource:
+ # default:
+ # driver: com.mysql.jdbc.Driver
+ # URL: jdbc:mysql://localhost:3306/jobconfig?useUnicode=true&characterEncoding=utf8
+ # user: root
+ # password: 12345678
+ # maxConnections: 5
+ #鐩稿叧灞炴ч厤缃
+ properties:
+ org:
+ quartz:
+ scheduler:
+ instanceName: quartzScheduler
+ instanceId: AUTO
+ jobStore:
+ class: org.quartz.impl.jdbcjobstore.JobStoreTX
+ driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
+ tablePrefix: qrtz_
+ isClustered: false
+ clusterCheckinInterval: 10000
+ useProperties: false
+ threadPool:
+ class: org.quartz.simpl.SimpleThreadPool
+ threadCount: 10
+ threadPriority: 5
+ threadsInheritContextClassLoaderOfInitializingThread: true
+ #鏁版嵁搴撴柟寮
+ job-store-type: JDBC
+ #鍒濆鍖栬〃缁撴瀯
+ jdbc:
+ initialize-schema: always
redis:
database: 0
host: 127.0.0.1
@@ -18,5 +50,22 @@ spring:
password: ''
port: 6379
timeout: 1000ms
+ rabbitmq:
+ host: 192.168.4.113
+ password: 111111
+ port: 5672
+ username: admin
+ redis:
+ database: 0
+ host: 127.0.0.1
+ jedis:
+ pool:
+ max-active: 200
+ max-idle: 10
+ max-wait: -1ms
+ min-idle: 0
+ password: ''
+ port: 6379
+ timeout: 1000ms
swagger:
enable: true
\ No newline at end of file