定时任务添加参数

pull/8/MERGE
18idc 2021-04-09 21:49:50 +08:00
parent 23f1128fe8
commit e12bf8e7eb
10 changed files with 45 additions and 18 deletions

View File

@ -33,7 +33,7 @@ public class ClearInvalidLoginUserCacheTimer implements TimerAction {
} }
@Override @Override
public void action() { public void action(String params) {
Collection<String> allOnlineUsers = allPlaceLoginTokenCache.getAllKeys(); Collection<String> allOnlineUsers = allPlaceLoginTokenCache.getAllKeys();
if (ObjectUtil.isNotEmpty(allOnlineUsers)) { if (ObjectUtil.isNotEmpty(allOnlineUsers)) {
for (String userId : allOnlineUsers) { for (String userId : allOnlineUsers) {

View File

@ -37,9 +37,10 @@ public interface TimerAction {
/** /**
* *
* *
* @param params
* @author stylefeng * @author stylefeng
* @date 2020/6/28 21:29 * @date 2020/6/28 21:29
*/ */
void action(); void action(String params);
} }

View File

@ -58,10 +58,11 @@ public interface TimerExeService {
* @param taskId id * @param taskId id
* @param cron cron * @param cron cron
* @param className TimerAction * @param className TimerAction
* @param params
* @author stylefeng * @author stylefeng
* @date 2020/7/1 13:51 * @date 2020/7/1 13:51
*/ */
void startTimer(String taskId, String cron, String className); void startTimer(String taskId, String cron, String className, String params);
/** /**
* *

View File

@ -64,6 +64,12 @@ public class SysTimers extends BaseEntity {
@TableField("cron") @TableField("cron")
private String cron; private String cron;
/**
*
*/
@TableField("params")
private String params;
/** /**
* 1-2- * 1-2-
*/ */

View File

@ -63,7 +63,7 @@ public class TaskRunListener implements ApplicationListener<ApplicationStartedEv
// 添加定时任务到调度器 // 添加定时任务到调度器
for (SysTimers sysTimers : list) { for (SysTimers sysTimers : list) {
try { try {
timerExeService.startTimer(String.valueOf(sysTimers.getTimerId()), sysTimers.getCron(), sysTimers.getActionClass()); timerExeService.startTimer(String.valueOf(sysTimers.getTimerId()), sysTimers.getCron(), sysTimers.getActionClass(), sysTimers.getParams());
} catch (Exception exception) { } catch (Exception exception) {
// 遇到错误直接略过这个定时器(可能多个项目公用库) // 遇到错误直接略过这个定时器(可能多个项目公用库)
log.error("定时器初始化遇到错误,略过该定时器!", exception); log.error("定时器初始化遇到错误,略过该定时器!", exception);

View File

@ -71,6 +71,11 @@ public class SysTimersParam extends BaseRequest {
@NotNull(message = "任务状态不能为空", groups = {edit.class}) @NotNull(message = "任务状态不能为空", groups = {edit.class})
private Integer jobStatus; private Integer jobStatus;
/**
*
*/
private String params;
/** /**
* *
*/ */

View File

@ -29,6 +29,7 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.cron.CronUtil; import cn.hutool.cron.CronUtil;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
import cn.hutool.http.HtmlUtil;
import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity; import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
@ -70,6 +71,8 @@ public class SysTimersServiceImpl extends ServiceImpl<SysTimersMapper, SysTimers
@Override @Override
public void add(SysTimersParam sysTimersParam) { public void add(SysTimersParam sysTimersParam) {
// 还原被转义的HTML特殊字符
unescapeHtml(sysTimersParam);
// 将dto转为实体 // 将dto转为实体
SysTimers sysTimers = new SysTimers(); SysTimers sysTimers = new SysTimers();
@ -97,6 +100,8 @@ public class SysTimersServiceImpl extends ServiceImpl<SysTimersMapper, SysTimers
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public void edit(SysTimersParam sysTimersParam) { public void edit(SysTimersParam sysTimersParam) {
// 还原被转义的HTML特殊字符
unescapeHtml(sysTimersParam);
// 更新库中记录 // 更新库中记录
SysTimers oldTimer = this.querySysTimers(sysTimersParam); SysTimers oldTimer = this.querySysTimers(sysTimersParam);
@ -109,10 +114,7 @@ public class SysTimersServiceImpl extends ServiceImpl<SysTimersMapper, SysTimers
// 如果任务正在运行,则停掉这个任务,从新运行任务 // 如果任务正在运行,则停掉这个任务,从新运行任务
if (jobStatus.equals(TimerJobStatusEnum.RUNNING.getCode())) { if (jobStatus.equals(TimerJobStatusEnum.RUNNING.getCode())) {
CronUtil.remove(String.valueOf(oldTimer.getTimerId())); CronUtil.remove(String.valueOf(oldTimer.getTimerId()));
timerExeService.startTimer( timerExeService.startTimer(String.valueOf(sysTimersParam.getTimerId()), sysTimersParam.getCron(), sysTimersParam.getActionClass(), sysTimersParam.getParams());
String.valueOf(sysTimersParam.getTimerId()),
sysTimersParam.getCron(),
sysTimersParam.getActionClass());
} }
} }
@ -122,13 +124,12 @@ public class SysTimersServiceImpl extends ServiceImpl<SysTimersMapper, SysTimers
// 更新库中的状态 // 更新库中的状态
LambdaUpdateWrapper<SysTimers> wrapper = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<SysTimers> wrapper = new LambdaUpdateWrapper<>();
wrapper.set(SysTimers::getJobStatus, TimerJobStatusEnum.RUNNING.getCode()) wrapper.set(SysTimers::getJobStatus, TimerJobStatusEnum.RUNNING.getCode()).eq(SysTimers::getTimerId, sysTimersParam.getTimerId());
.eq(SysTimers::getTimerId, sysTimersParam.getTimerId());
this.update(wrapper); this.update(wrapper);
// 添加定时任务调度 // 添加定时任务调度
SysTimers sysTimers = this.querySysTimers(sysTimersParam); SysTimers sysTimers = this.querySysTimers(sysTimersParam);
timerExeService.startTimer(String.valueOf(sysTimers.getTimerId()), sysTimers.getCron(), sysTimers.getActionClass()); timerExeService.startTimer(String.valueOf(sysTimers.getTimerId()), sysTimers.getCron(), sysTimers.getActionClass(), sysTimers.getParams());
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@ -137,8 +138,7 @@ public class SysTimersServiceImpl extends ServiceImpl<SysTimersMapper, SysTimers
// 更新库中的状态 // 更新库中的状态
LambdaUpdateWrapper<SysTimers> wrapper = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<SysTimers> wrapper = new LambdaUpdateWrapper<>();
wrapper.set(SysTimers::getJobStatus, TimerJobStatusEnum.STOP.getCode()) wrapper.set(SysTimers::getJobStatus, TimerJobStatusEnum.STOP.getCode()).eq(SysTimers::getTimerId, sysTimersParam.getTimerId());
.eq(SysTimers::getTimerId, sysTimersParam.getTimerId());
this.update(wrapper); this.update(wrapper);
// 关闭定时任务调度 // 关闭定时任务调度
@ -231,4 +231,17 @@ public class SysTimersServiceImpl extends ServiceImpl<SysTimersMapper, SysTimers
return queryWrapper; return queryWrapper;
} }
/**
* HTML
*
* @param sysTimersParam
* @author luojie
* @date 2021/04/09 21:40
*/
private void unescapeHtml(SysTimersParam sysTimersParam) {
String params = sysTimersParam.getParams();
params = HtmlUtil.unescape(params);
sysTimersParam.setParams(params);
}
} }

View File

@ -24,6 +24,7 @@
*/ */
package cn.stylefeng.roses.kernel.timer.modular.tasks; package cn.stylefeng.roses.kernel.timer.modular.tasks;
import cn.hutool.core.util.StrUtil;
import cn.stylefeng.roses.kernel.timer.api.TimerAction; import cn.stylefeng.roses.kernel.timer.api.TimerAction;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -37,8 +38,8 @@ import org.springframework.stereotype.Component;
public class SystemOutTaskRunner implements TimerAction { public class SystemOutTaskRunner implements TimerAction {
@Override @Override
public void action() { public void action(String params) {
System.out.println("这是一个定时任务测试的程序,一直输出这行内容!"); System.out.println(StrUtil.format("这是一个定时任务测试的程序,一直输出这行内容!这个是参数: {}", params));
} }
} }

View File

@ -58,7 +58,7 @@ public class HutoolTimerExeServiceImpl implements TimerExeService {
} }
@Override @Override
public void startTimer(String taskId, String cron, String className) { public void startTimer(String taskId, String cron, String className, String params) {
// 判断任务id是否为空 // 判断任务id是否为空
if (StrUtil.isBlank(taskId)) { if (StrUtil.isBlank(taskId)) {
@ -86,7 +86,7 @@ public class HutoolTimerExeServiceImpl implements TimerExeService {
Task task = () -> { Task task = () -> {
try { try {
TimerAction timerAction = (TimerAction) SpringUtil.getBean(Class.forName(className)); TimerAction timerAction = (TimerAction) SpringUtil.getBean(Class.forName(className));
timerAction.action(); timerAction.action(params);
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
log.error("任务执行异常:{}", e.getMessage()); log.error("任务执行异常:{}", e.getMessage());
} }

View File

@ -38,7 +38,7 @@ public class SystemHardwareInfoHolder implements TimerAction {
private SystemHardwareCalculator systemHardwareCalculator = null; private SystemHardwareCalculator systemHardwareCalculator = null;
@Override @Override
public void action() { public void action(String params) {
SystemHardwareCalculator newInfo = new SystemHardwareCalculator(); SystemHardwareCalculator newInfo = new SystemHardwareCalculator();
newInfo.calc(); newInfo.calc();
systemHardwareCalculator = newInfo; systemHardwareCalculator = newInfo;