Java-[RuoYi单体版]-逻辑中创建定时任务
逻辑创建定时任务
SysJob job = new SysJob();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
job.setJobName("任务" + sdf.format(new Date()));//定时任务名称
job.setJobGroup("DEFAULT");//定时任务组
job.setInvokeTarget("testTask.saveOrder('" + job.getJobName() + "')");//定时执行方法名
//依据当前定时任务获取下一分钟的定时任务时间
Date date = new Date();
//在时间基础上加一分钟
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:00");
date = cn.hutool.core.date.DateUtil.offset(sdf2.parse(sdf2.format(date)), DateField.MINUTE, 1);
//判断处理后的时间是否大于当前时间且小于条件截至时间
if (orderJobVo.getTimeLength() != 0) {
Date endDate = cn.hutool.core.date.DateUtil.offset(orderJobVo.getCreateTime(), DateField.MINUTE, orderJobVo.getTimeLength());
if (date.getTime() < endDate.getTime()) {
Boolean isContinue = true;
while (isContinue) {
if (date.getTime() <= (new Date()).getTime()) {
date = DateUtil.offset(date, DateField.MINUTE, 1);
} else {
isContinue = false;
String corn = formatDateByPattern(date, "ss mm HH dd MM ? yyyy");
job.setStatus(ScheduleConstants.Status.NORMAL.getValue());//状态枚举,NORMAL-正常;PAUSE-暂停
job.setConcurrent("0");//是否并发执行(0允许 1禁止)
job.setCronExpression(corn);//定时正则
int rows = orderService.insertJob(job);
System.out.println("时间:" + sdf2.format(new Date()) + " 添加:" + job);
if (rows > 0) {
OrderJobVo updateOrderJobVo = new OrderJobVo();
updateOrderJobVo.setId(orderJobVo.getId());
updateOrderJobVo.setJobId(job.getJobId());
updateOrderJobVo.setUpdateBy(orderJobVo.getCreateBy());
Boolean update = orderService.updateOrderJobJobIdById(updateOrderJobVo);
if (update) {
try {
//执行创建定时任务
ScheduleUtils.createScheduleJob(scheduler, job);
} catch (SchedulerException e) {
e.printStackTrace();
} catch (TaskException e) {
e.printStackTrace();
}
}
}
}
}
}
}
定时执行的业务
@Component("testTask")
public class TestTask {
@Autowired
private ISysJobService jobService;
@Async("asyncServiceExecutor")
public void saveOrder(String jobName) throws SchedulerException {
long start = System.currentTimeMillis();
String name = Thread.currentThread().getName();
String main = "TestTask.execute()..." + name;
System.out.println(main);
AsyncManager.me().execute(new TimerTask() {
@Override
public void run() {
String name1 = Thread.currentThread().getName();
....
....
}
});
}
}
##时间定时正则转换方法
String corn = formatDateByPattern(date, "ss mm HH dd MM ? yyyy");
public static String formatDateByPattern(Date date, String dateFormat) {
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
String formatTimeStr = null;
if (date != null) {
formatTimeStr = sdf.format(date);
}
return formatTimeStr;
}