diff --git a/kernel-d-timer/timer-api/src/main/java/cn/stylefeng/roses/kernel/timer/api/TimerExeService.java b/kernel-d-timer/timer-api/src/main/java/cn/stylefeng/roses/kernel/timer/api/TimerExeService.java index 7ab977b51..81d5d296d 100644 --- a/kernel-d-timer/timer-api/src/main/java/cn/stylefeng/roses/kernel/timer/api/TimerExeService.java +++ b/kernel-d-timer/timer-api/src/main/java/cn/stylefeng/roses/kernel/timer/api/TimerExeService.java @@ -8,6 +8,22 @@ package cn.stylefeng.roses.kernel.timer.api; */ public interface TimerExeService { + /** + * 开启定时器调度 + * + * @author fengshuonan + * @date 2021/1/12 20:33 + */ + void start(); + + /** + * 关闭定时器调度 + * + * @author fengshuonan + * @date 2021/1/12 20:33 + */ + void stop(); + /** * 启动一个定时器 *

diff --git a/kernel-d-timer/timer-business/src/main/java/cn/stylefeng/roses/kernel/timer/modular/listener/TaskRunListener.java b/kernel-d-timer/timer-business/src/main/java/cn/stylefeng/roses/kernel/timer/modular/listener/TaskRunListener.java new file mode 100644 index 000000000..710150c98 --- /dev/null +++ b/kernel-d-timer/timer-business/src/main/java/cn/stylefeng/roses/kernel/timer/modular/listener/TaskRunListener.java @@ -0,0 +1,47 @@ +package cn.stylefeng.roses.kernel.timer.modular.listener; + +import cn.hutool.extra.spring.SpringUtil; +import cn.stylefeng.roses.kernel.timer.api.TimerExeService; +import cn.stylefeng.roses.kernel.timer.api.enums.TimerJobStatusEnum; +import cn.stylefeng.roses.kernel.timer.modular.entity.SysTimers; +import cn.stylefeng.roses.kernel.timer.modular.param.SysTimersParam; +import cn.stylefeng.roses.kernel.timer.modular.service.SysTimersService; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.context.ApplicationListener; +import org.springframework.core.Ordered; + +import java.util.List; + +/** + * 项目启动,将数据库所有定时任务开启 + * + * @author fengshuonan + * @date 2021/1/12 20:40 + */ +public class TaskRunListener implements ApplicationListener, Ordered { + + @Override + public void onApplicationEvent(ApplicationStartedEvent event) { + + SysTimersService sysTimersService = SpringUtil.getBean(SysTimersService.class); + TimerExeService timerExeService = SpringUtil.getBean(TimerExeService.class); + + // 开启任务调度 + timerExeService.start(); + + // 获取数据库所有开启状态的任务 + SysTimersParam sysTimersParam = new SysTimersParam(); + sysTimersParam.setJobStatus(TimerJobStatusEnum.RUNNING.getCode()); + List list = sysTimersService.list(sysTimersParam); + + // 添加定时任务到调度器 + for (SysTimers sysTimers : list) { + timerExeService.startTimer(String.valueOf(sysTimers.getTimerId()), sysTimers.getCron(), sysTimers.getActionClass()); + } + } + + @Override + public int getOrder() { + return LOWEST_PRECEDENCE; + } +} diff --git a/kernel-d-timer/timer-sdk-hutool/src/main/java/cn/stylefeng/roses/kernel/hutool/HutoolTimerExeServiceImpl.java b/kernel-d-timer/timer-sdk-hutool/src/main/java/cn/stylefeng/roses/kernel/hutool/HutoolTimerExeServiceImpl.java index 7d9c7f44e..4f240eec9 100644 --- a/kernel-d-timer/timer-sdk-hutool/src/main/java/cn/stylefeng/roses/kernel/hutool/HutoolTimerExeServiceImpl.java +++ b/kernel-d-timer/timer-sdk-hutool/src/main/java/cn/stylefeng/roses/kernel/hutool/HutoolTimerExeServiceImpl.java @@ -19,6 +19,20 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class HutoolTimerExeServiceImpl implements TimerExeService { + @Override + public void start() { + // 设置秒级别的启用 + CronUtil.setMatchSecond(true); + + // 启动定时器执行器 + CronUtil.start(); + } + + @Override + public void stop() { + CronUtil.stop(); + } + @Override public void startTimer(String taskId, String cron, String className) { diff --git a/kernel-d-timer/timer-spring-boot-starter/src/main/resources/META-INF/spring.factories b/kernel-d-timer/timer-spring-boot-starter/src/main/resources/META-INF/spring.factories index f409a39e5..cca2bad7e 100644 --- a/kernel-d-timer/timer-spring-boot-starter/src/main/resources/META-INF/spring.factories +++ b/kernel-d-timer/timer-spring-boot-starter/src/main/resources/META-INF/spring.factories @@ -1,2 +1,4 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - cn.stylefeng.roses.kernel.timer.starter.GunsTimerAutoConfiguration \ No newline at end of file + cn.stylefeng.roses.kernel.timer.starter.GunsTimerAutoConfiguration +org.springframework.context.ApplicationListener=\ + cn.stylefeng.roses.kernel.timer.modular.listener.TaskRunListener