Browse Source

task list

master
zhizhi wu 4 years ago
parent
commit
691aa0dcdc
  1. 43
      scheduler/src/main/java/com/ccsens/scheduler/api/JobController.java
  2. 62
      scheduler/src/main/java/com/ccsens/scheduler/bean/dto/QuartzJobDto.java
  3. 48
      scheduler/src/main/java/com/ccsens/scheduler/bean/vo/JobVo.java
  4. 110
      scheduler/src/main/java/com/ccsens/scheduler/listener/SimpleSchedulerListener.java
  5. 19
      scheduler/src/main/java/com/ccsens/scheduler/persist/dao/TaskDao.java
  6. 7
      scheduler/src/main/java/com/ccsens/scheduler/service/CoreJobService.java
  7. 29
      scheduler/src/main/java/com/ccsens/scheduler/service/IJobService.java
  8. 32
      scheduler/src/main/java/com/ccsens/scheduler/service/JobService.java
  9. 16
      scheduler/src/main/java/com/ccsens/scheduler/util/QuartzJobUtil.java
  10. 2
      scheduler/src/main/resources/application.yml
  11. 32
      scheduler/src/main/resources/banner.txt
  12. 81
      scheduler/src/main/resources/mapper_dao/TaskDao.xml

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

@ -1,11 +1,12 @@
package com.ccsens.scheduler.api;
import com.ccsens.scheduler.bean.dto.QuartzJob;
import com.ccsens.scheduler.bean.dto.QuartzJobDto;
import com.ccsens.scheduler.bean.dto.QueryDto;
import com.ccsens.scheduler.bean.vo.JobVo;
import com.ccsens.scheduler.service.IJobService;
import com.ccsens.scheduler.util.CodeEnum;
import com.ccsens.util.JsonResponse;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@ -14,7 +15,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;
/**
* @description:
@ -30,13 +31,38 @@ public class JobController {
@Resource
private IJobService jobService;
@ApiOperation(value = "/任务列表",notes = "")
@ApiImplicitParams({
})
@RequestMapping(value="list",method = RequestMethod.POST,produces = {"application/json;charset=UTF-8"})
public JsonResponse<JobVo.JobDetail> list(@ApiParam @Validated @RequestBody QueryDto<QuartzJobDto.Query> dto) {
log.info("添加任务:{}", dto);
QuartzJobDto.Query query = dto.getParam();
PageInfo<JobVo.JobDetail> list = jobService.list(query, dto.getUserId());
log.info("添加任务结果:{}", list);
return JsonResponse.newInstance().ok(list);
}
@ApiOperation(value = "/任务详情",notes = "")
@ApiImplicitParams({
})
@RequestMapping(value="get",method = RequestMethod.POST,produces = {"application/json;charset=UTF-8"})
public JsonResponse<JobVo.JobDetail> get(@ApiParam @Validated @RequestBody QueryDto<QuartzJobDto.Get> dto) {
log.info("添加任务:{}", dto);
QuartzJobDto.Get query = dto.getParam();
JobVo.JobDetail detail = jobService.get(query, dto.getUserId());
log.info("添加任务结果:{}", detail);
return JsonResponse.newInstance().ok(detail);
}
@ApiOperation(value = "/添加任务",notes = "")
@ApiImplicitParams({
})
@RequestMapping(value="add",method = RequestMethod.POST,produces = {"application/json;charset=UTF-8"})
public JsonResponse<JobVo.SimpleJob> add(@ApiParam @Validated @RequestBody QueryDto<QuartzJob.Job> dto) {
public JsonResponse<JobVo.SimpleJob> add(@ApiParam @Validated @RequestBody QueryDto<QuartzJobDto.Job> dto) {
log.info("添加任务:{}", dto);
QuartzJob.Job job = dto.getParam();
QuartzJobDto.Job job = dto.getParam();
JobVo.SimpleJob result = jobService.add(job, dto.getUserId());
log.info("添加任务结果:{}", result);
return JsonResponse.newInstance().ok(result);
@ -47,7 +73,7 @@ public class JobController {
@ApiImplicitParams({
})
@RequestMapping(value="modifyTime",method = RequestMethod.POST,produces = {"application/json;charset=UTF-8"})
public JsonResponse modifyTime(@ApiParam @Validated @RequestBody QueryDto<QuartzJob.Update> dto) {
public JsonResponse modifyTime(@ApiParam @Validated @RequestBody QueryDto<QuartzJobDto.Update> dto) {
log.info("修改任务:{}", dto);
CodeEnum codeEnum = jobService.modify(dto.getParam(), dto.getUserId());
log.info("修改任务结果:{}", codeEnum);
@ -58,7 +84,7 @@ public class JobController {
@ApiImplicitParams({
})
@RequestMapping(value="pause",method = RequestMethod.POST,produces = {"application/json;charset=UTF-8"})
public JsonResponse pause(@ApiParam @Validated @RequestBody QueryDto<QuartzJob.Name> dto) {
public JsonResponse pause(@ApiParam @Validated @RequestBody QueryDto<QuartzJobDto.Name> dto) {
log.info("停止任务:{}", dto);
CodeEnum codeEnum = jobService.pause(dto.getParam(), dto.getUserId());
log.info("停止任务结果:{}", codeEnum);
@ -68,18 +94,17 @@ public class JobController {
@ApiImplicitParams({
})
@RequestMapping(value="resume",method = RequestMethod.POST,produces = {"application/json;charset=UTF-8"})
public JsonResponse resume(@ApiParam @Validated @RequestBody QueryDto<QuartzJob.Name> dto) {
public JsonResponse resume(@ApiParam @Validated @RequestBody QueryDto<QuartzJobDto.Name> dto) {
log.info("恢复任务:{}", dto);
CodeEnum codeEnum = jobService.resume(dto.getParam(), dto.getUserId());
log.info("恢复任务结果:{}", codeEnum);
return JsonResponse.newInstance().ok(codeEnum);
}
@ApiOperation(value = "/移除任务",notes = "")
@ApiImplicitParams({
})
@RequestMapping(value="remove",method = RequestMethod.POST,produces = {"application/json;charset=UTF-8"})
public JsonResponse remove(@ApiParam @Validated @RequestBody QueryDto<QuartzJob.Del> dto) {
public JsonResponse remove(@ApiParam @Validated @RequestBody QueryDto<QuartzJobDto.Del> dto) {
log.info("移除任务:{}", dto);
CodeEnum codeEnum = jobService.remove(dto.getParam(), dto.getUserId());
log.info("移除任务结果:{}", dto);

62
scheduler/src/main/java/com/ccsens/scheduler/bean/dto/QuartzJobDto.java

@ -22,7 +22,55 @@ import java.util.Date;
* @time: 2021/6/30 16:00
*/
@Data
public class QuartzJob {
public class QuartzJobDto {
@Data
@ApiModel("单个任务查询")
public static class Get{
@ApiModelProperty("job名称")
private String jobName;
@ApiModelProperty("job组名")
private String jobGroupName;
}
@Data
@ApiModel("任务列表查询")
public static class Query{
@ApiModelProperty("job名称")
private String jobName;
@ApiModelProperty("job组名")
private String jobGroupName;
@ApiModelProperty("触发器名称")
private String triggerName;
@ApiModelProperty("触发器组名")
private String triggerGroupName;
@ApiModelProperty("触发器开始时间")
private Long startTime;
@ApiModelProperty("触发器结束时间")
private Long endTime;
@ApiModelProperty("misfire对应的处理规则")
private String misfirePolicy;
@ApiModelProperty("执行定时任务的具体操作,0:任务通知")
private Byte job;
@Min(0)
@Max(1)
@ApiModelProperty("自动迁移 0:不自动迁移 1:自动迁移")
private Byte autoMove;
@Min(0)
@Max(3)
@ApiModelProperty("通知方式0:http 1:mq 2:邮件 3:短信")
private Byte notifyWay;
@ApiModelProperty("通知路径/mq/收件人/手机号")
private String notifyUrl;
@ApiModelProperty("appId")
private Long appId;
@ApiModelProperty("第几页")
@Min(value = 1)
private int pageNum = 1;
@ApiModelProperty("每页多少条")
@Min(value = 1)
@Max(value=100)
private int pageSize = 10;
}
@Data
@ApiModel("任务")
@ -31,9 +79,9 @@ public class QuartzJob {
private String jobName;
@ApiModelProperty("job组名")
private String jobGroupName = Constant.Quartz.QZ_JOB_GROUP_NAME;
@ApiModelProperty("定时器名称")
@ApiModelProperty("触发器名称")
private String triggerName;
@ApiModelProperty("定时器组名")
@ApiModelProperty("触发器组名")
private String triggerGroupName = Constant.Quartz.QZ_TRIGGER_GROUP_NAME;
@ApiModelProperty("触发器开始时间")
private long startTime;
@ -83,9 +131,9 @@ public class QuartzJob {
@Data
@ApiModel("任务名称")
public static class Update {
@ApiModelProperty("定时器名称")
@ApiModelProperty("触发器名称")
private String triggerName;
@ApiModelProperty("定时器组名")
@ApiModelProperty("触发器组名")
private String triggerGroupName = Constant.Quartz.QZ_TRIGGER_GROUP_NAME;
@ApiModelProperty("表达式")
private String cron;
@ -129,9 +177,9 @@ public class QuartzJob {
private String jobName;
@ApiModelProperty("job组名")
private String jobGroupName = Constant.Quartz.QZ_JOB_GROUP_NAME;
@ApiModelProperty("定时器名称")
@ApiModelProperty("触发器名称")
private String triggerName;
@ApiModelProperty("定时器组名")
@ApiModelProperty("触发器组名")
private String triggerGroupName = Constant.Quartz.QZ_TRIGGER_GROUP_NAME;
}

48
scheduler/src/main/java/com/ccsens/scheduler/bean/vo/JobVo.java

@ -5,6 +5,9 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
/**
* @description:
* @author: whj
@ -19,9 +22,50 @@ public class JobVo {
private String jobName;
@ApiModelProperty("job组名")
private String jobGroupName = Constant.Quartz.QZ_JOB_GROUP_NAME;
@ApiModelProperty("定时器名称")
@ApiModelProperty("触发器名称")
private String triggerName;
@ApiModelProperty("定时器组名")
@ApiModelProperty("触发器组名")
private String triggerGroupName = Constant.Quartz.QZ_TRIGGER_GROUP_NAME;
}
@Data
@ApiModel("任务详情")
public static class JobDetail{
@ApiModelProperty("id")
private Long id;
@ApiModelProperty("job名称")
private String jobName;
@ApiModelProperty("job组名")
private String jobGroupName ;
@ApiModelProperty("触发器名称")
private String triggerName;
@ApiModelProperty("触发器组名")
private String triggerGroupName;
@ApiModelProperty("触发器开始时间")
private long startTime;
@ApiModelProperty("触发器结束时间")
private long endTime;
@ApiModelProperty("misfire对应的处理规则")
private String misfirePolicy;
@ApiModelProperty("执行定时任务的具体操作,0:任务通知")
private byte job;
@ApiModelProperty("cron")
private String cron;
@ApiModelProperty("通知方式0:http 1:mq 2:邮件 3:短信")
private byte notifyWay;
@ApiModelProperty("通知路径/mq/收件人/手机号")
private String notifyUrl;
@ApiModelProperty("通知参数")
private String notifyParam;
@ApiModelProperty("上一次执行时间")
private Long prevFireTime;
@ApiModelProperty("下一次执行时间")
private Long nextFireTime;
@ApiModelProperty("状态")
private String triggerState;
@ApiModelProperty("appId")
private Long appId;
@ApiModelProperty("状态 0:启用 1:状态")
private byte recStatus;
}
}

110
scheduler/src/main/java/com/ccsens/scheduler/listener/SimpleSchedulerListener.java

@ -0,0 +1,110 @@
package com.ccsens.scheduler.listener;
import org.quartz.*;
/**
* @description:
* @author: whj
* @time: 2021/8/19 16:52
*/
public class SimpleSchedulerListener implements SchedulerListener {
@Override
public void jobScheduled(Trigger trigger) {
}
@Override
public void jobUnscheduled(TriggerKey triggerKey) {
}
@Override
public void triggerFinalized(Trigger trigger) {
System.out.println("触发器完成时不会再次被触发是被调度器调用");
}
@Override
public void triggerPaused(TriggerKey triggerKey) {
}
@Override
public void triggersPaused(String s) {
}
@Override
public void triggerResumed(TriggerKey triggerKey) {
}
@Override
public void triggersResumed(String s) {
}
@Override
public void jobAdded(JobDetail jobDetail) {
}
@Override
public void jobDeleted(JobKey jobKey) {
}
@Override
public void jobPaused(JobKey jobKey) {
}
@Override
public void jobsPaused(String s) {
}
@Override
public void jobResumed(JobKey jobKey) {
}
@Override
public void jobsResumed(String s) {
}
@Override
public void schedulerError(String s, SchedulerException e) {
}
@Override
public void schedulerInStandbyMode() {
}
@Override
public void schedulerStarted() {
}
@Override
public void schedulerStarting() {
}
@Override
public void schedulerShutdown() {
}
@Override
public void schedulerShuttingdown() {
}
@Override
public void schedulingDataCleared() {
System.out.println("schedulingDataCleared");
}
}

19
scheduler/src/main/java/com/ccsens/scheduler/persist/dao/TaskDao.java

@ -1,9 +1,28 @@
package com.ccsens.scheduler.persist.dao;
import com.ccsens.scheduler.bean.dto.QuartzJobDto;
import com.ccsens.scheduler.bean.vo.JobVo;
import com.ccsens.scheduler.persist.mapper.TaskMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author wu
*/
public interface TaskDao extends TaskMapper {
/**
* 查询任务列表
* @param query 查询条件
* @param appIds 操作人的appId
* @return
*/
List<JobVo.JobDetail> query(@Param("query") QuartzJobDto.Query query, @Param("appIds") List<Long> appIds);
/**
* 根据任务名和分组查询详情
* @param query 任务名 分组
* @return
*/
JobVo.JobDetail get(@Param("query") QuartzJobDto.Get query);
}

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

@ -1,6 +1,7 @@
package com.ccsens.scheduler.service;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.mail.Mail;
import cn.hutool.extra.mail.MailUtil;
import com.alibaba.fastjson.JSONObject;
@ -58,7 +59,11 @@ public class CoreJobService extends QuartzJobBean implements ICoreJobService {
try {
switch (task.getNotifyWay()) {
case Constant.NotifyWay.HTTP:
RestTemplateUtil.postBody(task.getNotifyUrl(), JSONObject.parse(task.getNotifyParam()));
String param = task.getNotifyParam();
if (StrUtil.isBlank(param)) {
param = "{}";
}
RestTemplateUtil.postBody(task.getNotifyUrl(), JSONObject.parse(param));
break;
case Constant.NotifyWay.MQ:
rabbitTemplate.convertAndSend(task.getNotifyUrl(), task.getNotifyParam());

29
scheduler/src/main/java/com/ccsens/scheduler/service/IJobService.java

@ -1,8 +1,9 @@
package com.ccsens.scheduler.service;
import com.ccsens.scheduler.bean.dto.QuartzJob;
import com.ccsens.scheduler.bean.dto.QuartzJobDto;
import com.ccsens.scheduler.bean.vo.JobVo;
import com.ccsens.scheduler.util.CodeEnum;
import com.github.pagehelper.PageInfo;
/**
* @author whj
@ -15,33 +16,49 @@ public interface IJobService {
* @param userId 操作人
* @return 结果 任务名和触发器名
*/
JobVo.SimpleJob add(QuartzJob.Job job, Long userId);
JobVo.SimpleJob add(QuartzJobDto.Job job, Long userId);
/**
* 修改定时任务
* @param job 任务
* @param userId 操作人
* @return 结果
*/
CodeEnum modify(QuartzJob.Update job, Long userId);
CodeEnum modify(QuartzJobDto.Update job, Long userId);
/**
* 暂停定时任务
* @param job 任务名
* @param userId 操作人
* @return 结果
*/
CodeEnum pause(QuartzJob.Name job, Long userId);
CodeEnum pause(QuartzJobDto.Name job, Long userId);
/**
* 重启定时任务
* @param job 任务名
* @param userId 操作人
* @return 结果
*/
CodeEnum resume(QuartzJob.Name job, Long userId);
CodeEnum resume(QuartzJobDto.Name job, Long userId);
/**
* 删除定时任务
* @param job 任务名
* @param userId 操作人
* @return 结果
*/
CodeEnum remove(QuartzJob.Del job, Long userId);
CodeEnum remove(QuartzJobDto.Del job, Long userId);
/**
* 查询任务列表
* @param query 查询条件
* @param userId 操作人
* @return 任务详情
*/
PageInfo<JobVo.JobDetail> list(QuartzJobDto.Query query, Long userId);
/**
* 查询详情
* @param query 查询条件
* @param userId 操作人
* @return 任务详情
*/
JobVo.JobDetail get(QuartzJobDto.Get query, Long userId);
}

32
scheduler/src/main/java/com/ccsens/scheduler/service/JobService.java

@ -3,7 +3,7 @@ package com.ccsens.scheduler.service;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.StrUtil;
import com.ccsens.scheduler.bean.dto.QuartzJob;
import com.ccsens.scheduler.bean.dto.QuartzJobDto;
import com.ccsens.scheduler.bean.po.Task;
import com.ccsens.scheduler.bean.po.TaskExample;
import com.ccsens.scheduler.bean.vo.JobVo;
@ -13,6 +13,8 @@ import com.ccsens.scheduler.util.CodeEnum;
import com.ccsens.scheduler.util.Constant;
import com.ccsens.scheduler.util.QuartzJobUtil;
import com.ccsens.util.RedisUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@ -20,6 +22,7 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
@ -43,7 +46,7 @@ public class JobService implements IJobService {
@Override
public JobVo.SimpleJob add(QuartzJob.Job job, Long userId) {
public JobVo.SimpleJob add(QuartzJobDto.Job job, Long userId) {
// 初始化对象
JobVo.SimpleJob result = initName(job);
log.info("job:{}", job);
@ -85,7 +88,7 @@ public class JobService implements IJobService {
* @param job 任务
* @return
*/
private JobVo.SimpleJob initName(QuartzJob.Job job) {
private JobVo.SimpleJob initName(QuartzJobDto.Job job) {
// TODO 命名规范待优化(业务系统名)
JobVo.SimpleJob simpleJob = new JobVo.SimpleJob();
long id = snowflake.nextId();
@ -106,7 +109,7 @@ public class JobService implements IJobService {
}
@Override
public CodeEnum modify(QuartzJob.Update job, Long userId) {
public CodeEnum modify(QuartzJobDto.Update job, Long userId) {
// 写缓存,防重复
String key = Constant.Quartz.JOB_KEY_PREFIX + job.getTriggerName() + Constant.Quartz.JOB_KEY_SPLIT + job.getTriggerGroupName();
boolean writeSuc = redisUtil.setNx(key, "", Constant.Quartz.JOB_KEY_EXPIRE_TIME);
@ -145,7 +148,7 @@ public class JobService implements IJobService {
}
@Override
public CodeEnum pause(QuartzJob.Name job, Long userId) {
public CodeEnum pause(QuartzJobDto.Name job, Long userId) {
boolean pause = quartzJobUtil.pauseJob(job.getJobName(), job.getJobGroupName());
if (!pause) {
return CodeEnum.JOB_PAUSE_FAIL;
@ -159,7 +162,7 @@ public class JobService implements IJobService {
}
@Override
public CodeEnum resume(QuartzJob.Name job, Long userId) {
public CodeEnum resume(QuartzJobDto.Name job, Long userId) {
boolean resume = quartzJobUtil.resumeJob(job.getJobName(), job.getJobGroupName());
if (!resume) {
return CodeEnum.JOB_RESUME_FAIL;
@ -173,7 +176,7 @@ public class JobService implements IJobService {
}
@Override
public CodeEnum remove(QuartzJob.Del job, Long userId) {
public CodeEnum remove(QuartzJobDto.Del job, Long userId) {
boolean remove = quartzJobUtil.removeJob(job.getJobName(), job.getJobGroupName(), job.getTriggerName(), job.getTriggerGroupName());
if (!remove) {
return CodeEnum.JOB_DEL_FAIL;
@ -185,4 +188,19 @@ public class JobService implements IJobService {
taskDao.updateByExampleSelective(task, example);
return CodeEnum.SUCCESS;
}
@Override
public PageInfo<JobVo.JobDetail> list(QuartzJobDto.Query query, Long userId) {
// TODO 根据userId查询appId,根据appId查询用户可见的任务
List<Long> appId = new ArrayList<>();
appId.add(0L);
PageHelper.startPage(query.getPageNum(), query.getPageSize());
List<JobVo.JobDetail> list = taskDao.query(query, appId);
return new PageInfo<>(list);
}
@Override
public JobVo.JobDetail get(QuartzJobDto.Get query, Long userId) {
return taskDao.get(query);
}
}

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

@ -1,6 +1,7 @@
package com.ccsens.scheduler.util;
import com.ccsens.scheduler.bean.dto.QuartzJob;
import com.ccsens.scheduler.bean.dto.QuartzJobDto;
import com.ccsens.scheduler.listener.SimpleSchedulerListener;
import lombok.extern.slf4j.Slf4j;
import org.quartz.*;
import org.quartz.impl.triggers.CronTriggerImpl;
@ -28,7 +29,7 @@ public class QuartzJobUtil {
* @Description: 添加一个定时任务
* @param jobModel 任务
*/
public boolean addJob(QuartzJob.Job jobModel) {
public boolean addJob(QuartzJobDto.Job jobModel) {
if (jobModel.verify()) {
try {
JobDetail job = JobBuilder.newJob((Class<? extends Job>) Class.forName(Constant.Quartz.JOB.get(jobModel.getJob())))
@ -43,6 +44,10 @@ public class QuartzJobUtil {
setPeriod(builder, jobModel.getStartTime(), jobModel.getEndTime());
Trigger trigger = builder.withSchedule(scheduleBuilder).build();
scheduler.scheduleJob(job, trigger);
// 创建并注册一个全局的Job Listener
scheduler.getListenerManager().addSchedulerListener(new SimpleSchedulerListener());
// 移除对应的SchedulerListener
// scheduler.getListenerManager().removeSchedulerListener(new SimpleSchedulerListener());
// 启动
if (!scheduler.isShutdown()) {
scheduler.start();
@ -72,9 +77,8 @@ public class QuartzJobUtil {
//当下一次触发频率发生时间大于当前时间后,再按照正常的Cron频率依次执行
return cb.withMisfireHandlingInstructionIgnoreMisfires();
case "withMisfireHandlingInstructionFireAndProceed":
//以错过的第一个频率时间立刻开始执行
//——重做错过的所有频率周期后
//——当下一次触发频率发生时间大于当前时间后,再按照正常的Cron频率依次执行
// 以当前时间为触发频率立刻触发一次执行
// 然后按照Cron频率依次执行
return cb.withMisfireHandlingInstructionFireAndProceed();
case "withMisfireHandlingInstructionDoNothing":
// 不触发立即执行
@ -91,7 +95,7 @@ public class QuartzJobUtil {
* @Description: 修改一个任务的触发时间(使用默认的任务组名触发器名触发器组名)
* @param jobModel 修改内容
*/
public boolean modifyJobTime(QuartzJob.Update jobModel) {
public boolean modifyJobTime(QuartzJobDto.Update jobModel) {
try {
TriggerKey triggerKey = TriggerKey.triggerKey(jobModel.getTriggerName(), jobModel.getTriggerGroupName());
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);

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

@ -1,4 +1,4 @@
spring:
profiles:
active: test
active: dev
include: common

32
scheduler/src/main/resources/banner.txt

@ -1,22 +1,10 @@
/**
* _ooOoo_
* o8888888o
* 88" . "88
* (| -_- |)
* O\ = /O
* ___/`---'\____
* . ' \\| |// `.
* / \\||| : |||// \
* / _||||| -:- |||||- \
* | | \\\ - /// | |
* | \_| ''\---/'' | |
* \ .-\__ `-` ___/-. /
* ___`. .' /--.--\ `. . __
* ."" '< `.___\_<|>_/___.' >'"".
* | | : `- \`.;`\ _ /`;.`/ - ` : | |
* \ \ `-. \_ __\ /__ _/ .-` / /
* ======`-.____`-.___\_____/___.-`____.-'======
* `=---='
* .............................................
* 佛曰:bug泛滥,我已瘫痪!
*/
_ _ U _____ u _ _ U ___ u U ___ u ____ _ ____
|'| |'| \| ___"|/ |"| |"| \/"_ \/ __ __ \/"_ \/U | _"\ u |"| | _"\
/| |_| |\ | _|" U | | u U | | u | | | | \"\ /"/ | | | | \| |_) |/U | | u /| | | |
U| _ |u | |___ \| |/__ \| |/__.-,_| |_| | /\ \ /\ / /\.-,_| |_| | | _ < \| |/__U| |_| |\
|_| |_| |_____| |_____| |_____|\_)-\___/ U \ V V / U\_)-\___/ |_| \_\ |_____||____/ u
// \\ << >> // \\ // \\ \\ .-,_\ /\ /_,-. \\ // \\_ // \\ |||_
(_") ("_)(__) (__)(_")("_)(_")("_) (__) \_)-' '-(_/ (__) (__) (__)(_")("_)(__)_)

81
scheduler/src/main/resources/mapper_dao/TaskDao.xml

@ -1,5 +1,86 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ccsens.scheduler.persist.dao.TaskDao">
<sql id="triggerDetail">
task.id,
task.job_name AS jobName,
task.job_group_name AS jobGroupName,
task.trigger_name AS triggerName,
task.trigger_group_name triggerGroupName,
task.cron,
task.misfire_policy AS misfirePolicy,
task.job AS job,
task.start_time AS startTime,
task.end_time AS endTime,
task.auto_move AS autoMove,
task.notify_way AS notifyWay,
task.notify_url AS notifyUrl,
task.notify_param AS notifyParam,
task.app_id AS appId,
task.rec_status AS recStatus,
trig.NEXT_FIRE_TIME nextFireTime,
trig.PREV_FIRE_TIME AS prevFireTime,
ifnull(trig.TRIGGER_STATE,'CLOSED') AS triggerState
</sql>
<select id="query" resultType="com.ccsens.scheduler.bean.vo.JobVo$JobDetail">
SELECT
<include refid="triggerDetail"/>
FROM
t_task task
left join QRTZ_TRIGGERS trig on task.trigger_name = trig.TRIGGER_NAME AND task.trigger_group_name = trig.TRIGGER_GROUP
left join QRTZ_JOB_DETAILS job on task.job_name = job.JOB_NAME AND task.job_group_name = job.JOB_GROUP
<where>
<if test="query.jobName != null and query.jobName != ''">
AND task.job_name = #{query.jobName}
</if>
<if test="query.jobGroupName != null and query.jobGroupName != ''">
AND task.job_group_name = #{query.jobGroupName}
</if>
<if test="query.triggerName != null and query.triggerName != ''">
AND task.trigger_name = #{query.triggerName}
</if>
<if test="query.triggerGroupName != null and query.triggerGroupName != ''">
AND task.trigger_group_name = #{query.triggerGroupName}
</if>
<if test="query.misfirePolicy != null and query.misfirePolicy != ''">
AND task.misfire_policy = #{query.misfirePolicy}
</if>
<if test="query.job != null">
AND task.job = #{query.job}
</if>
<if test="query.startTime != null and query.startTime != 0">
AND task.start_time &lt; #{query.endTime}
</if>
<if test="query.endTime != null and query.endTime != 0">
AND task.end_time &gt;= #{query.startTime}
</if>
<if test="query.autoMove != null">
AND task.auto_move = #{query.autoMove}
</if>
<if test="query.notifyWay != null">
AND task.notify_way = #{query.notifyWay}
</if>
<if test="query.appId != null and query.appId != 0">
AND task.app_id = #{query.appId}
</if>
AND task.rec_status IN ( 0, 1 )
AND task.app_id in
<foreach collection="appIds" item="appId" separator="," open="(" close=")">
#{appId}
</foreach>
</where>
</select>
<select id="get" resultType="com.ccsens.scheduler.bean.vo.JobVo$JobDetail">
SELECT
<include refid="triggerDetail"/>
FROM
t_task task
left join QRTZ_TRIGGERS trig on task.trigger_name = trig.TRIGGER_NAME AND task.trigger_group_name = trig.TRIGGER_GROUP
left join QRTZ_JOB_DETAILS job on task.job_name = job.JOB_NAME AND task.job_group_name = job.JOB_GROUP
where
task.job_name = #{query.jobName}
AND task.job_group_name = #{query.jobGroupName}
AND task.rec_status IN ( 0, 1 )
</select>
</mapper>
Loading…
Cancel
Save