Browse Source

Merge branch 'master' of gitee.com:ccsens_s/common

master
zy_Java 4 years ago
parent
commit
6039481a5b
  1. 2
      pom.xml
  2. 18
      scheduler/src/main/java/com/ccsens/scheduler/api/JobController.java
  3. 4
      scheduler/src/main/java/com/ccsens/scheduler/bean/dto/QuartzJobModule.java
  4. 7
      scheduler/src/main/java/com/ccsens/scheduler/service/TestJobDetail.java
  5. 30
      scheduler/src/main/java/com/ccsens/scheduler/util/QuartzJobUtil.java
  6. 2
      scheduler/src/main/resources/application-dev.yml
  7. 26
      scheduler/src/main/resources/application-test.yml

2
pom.xml

@ -19,7 +19,7 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

18
scheduler/src/main/java/com/ccsens/scheduler/api/JobController.java

@ -44,25 +44,29 @@ public class JobController {
return JsonResponse.newInstance().ok();
}
@ApiOperation(value = "/停止任务",notes = "")
@ApiImplicitParams({
})
@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
@ApiOperation(value = "/恢复任务",notes = "")
@ApiImplicitParams({
})
@RequestMapping(value="resume",method = RequestMethod.POST,produces = {"application/json;charset=UTF-8"})
public JsonResponse resume(String jobName) {
log.info("恢复任务");
quartzJobUtil.removeJob(jobName);
return JsonResponse.newInstance().ok();
}
@PostMapping("/remove")
@ResponseBody
@ApiOperation(value = "/移除任务",notes = "")
@ApiImplicitParams({
})
@RequestMapping(value="remove",method = RequestMethod.POST,produces = {"application/json;charset=UTF-8"})
public JsonResponse remove(String jobName) {
log.info("移除任务");
quartzJobUtil.removeJob(jobName);

4
scheduler/src/main/java/com/ccsens/scheduler/bean/dto/QuartzJobModule.java

@ -52,6 +52,10 @@ public class QuartzJobModule {
* cron表达式
*/
private String cron;
/**
* misfire对应的处理规则
*/
private String misfirePolicy = "withMisfireHandlingInstructionDoNothing";
/**
* job的附加信息
*/

7
scheduler/src/main/java/com/ccsens/scheduler/service/TestJobDetail.java

@ -17,6 +17,11 @@ public class TestJobDetail extends QuartzJobBean {
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
log.info("begin delwith batch task >>>>>>>>>>>>>>>>>>>>>>>");
String batchId = context.getJobDetail().getKey().getName();
log.info("执行的任务id为:[{}]", batchId);
// try {
// Thread.sleep(200);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
log.info("[{}]执行的任务id为:[{}]", System.currentTimeMillis(), batchId);
}
}

30
scheduler/src/main/java/com/ccsens/scheduler/util/QuartzJobUtil.java

@ -36,6 +36,7 @@ public class QuartzJobUtil {
.setJobData(quartzModel.getJobDataMap()).build();
// 表达式调度构建器
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(quartzModel.getCron());
handleCronScheduleMisfirePolicy(quartzModel, scheduleBuilder);
// 按新的cronExpression表达式构建一个新的trigger
TriggerBuilder<Trigger> builder = TriggerBuilder.newTrigger()
.withIdentity(quartzModel.getTriggerName(), quartzModel.getTriggerGroupName());
@ -45,6 +46,8 @@ public class QuartzJobUtil {
if (quartzModel.getEndTime() != null) {
builder.endAt(quartzModel.getEndTime());
}
Trigger trigger = builder.withSchedule(scheduleBuilder).build();
scheduler.scheduleJob(job, trigger);
// 启动
@ -53,7 +56,7 @@ public class QuartzJobUtil {
}
}
catch (Exception e) {
log.error("Add quartz job error, jobName = {}", quartzModel.getJobName());
log.error("Add quartz job error, jobName = {}", quartzModel.getJobName(), e);
}
}
@ -62,6 +65,29 @@ public class QuartzJobUtil {
}
}
public static CronScheduleBuilder handleCronScheduleMisfirePolicy(QuartzJobModule job, CronScheduleBuilder cb)
throws Exception {
switch (job.getMisfirePolicy()) {
case "withMisfireHandlingInstructionIgnoreMisfires":
//以错过的第一个频率时间立刻开始执行
//重做错过的所有频率周期后
//当下一次触发频率发生时间大于当前时间后,再按照正常的Cron频率依次执行
return cb.withMisfireHandlingInstructionIgnoreMisfires();
case "withMisfireHandlingInstructionFireAndProceed":
//以错过的第一个频率时间立刻开始执行
//——重做错过的所有频率周期后
//——当下一次触发频率发生时间大于当前时间后,再按照正常的Cron频率依次执行
return cb.withMisfireHandlingInstructionFireAndProceed();
case "withMisfireHandlingInstructionDoNothing":
// 不触发立即执行
// 等待下次Cron触发频率到达时刻开始按照Cron频率依次执行
return cb.withMisfireHandlingInstructionDoNothing();
default:
throw new Exception("The task misfire policy '" + job.getMisfirePolicy() + "' cannot be used in cron schedule tasks");
}
}
/**
* @Description: 修改一个任务的触发时间(使用默认的任务组名触发器名触发器组名)
* @param jobName
@ -182,7 +208,7 @@ public class QuartzJobUtil {
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);
Trigger trigger = scheduler.getTrigger(triggerKey);
if (trigger == null) {
return;
}

2
scheduler/src/main/resources/application-dev.yml

@ -1,5 +1,5 @@
server:
port: 8001
port: 8000
spring:
snowflake:
datacenterId: 1

26
scheduler/src/main/resources/application-test.yml

@ -18,6 +18,32 @@ spring:
password: ''
port: 6379
timeout: 1000ms
quartz:
#相关属性配置
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:
#always never
initialize-schema: never
swagger:
enable: true

Loading…
Cancel
Save