SpringBoot 任务调度 动态设置(不用重启服务)

1.初始化入口(注解 @PostConstruct)

@PostConstruct
private void initTimedTask() {
    //初始化任务调度器cron,可以从数据库中查询到cron值
    List<Tweek> tweeks=tweekService.listAll(new Tweek());
    String cron=tweeks.get(0).getCron();
    if("".equals(cron)){

    }else{
        //启动
        setTaskTimedCron(cron);
    }

}
TimedTask taskt;
public void setTaskTimedCron(String cron) {
    if (null == taskt) {
        taskt= new TimedTask ();
    }
    taskt.restart(cron);
}

2.任务调度类

public class TimedTask implements Runnable{

    Logger logger = Logger.getLogger(TimedTask .class);


    private ThreadPoolTaskScheduler threadPoolTaskScheduler;

    @Override
    public void run() {
    
        logger.info("每月最后一天定时发送彩信任务启动准备发送!");
        //业务逻辑
    }

    /**
     * 设置cron并启动
     * @param  cron值
     */
    public void restart(String cron) {
        if (null != this.threadPoolTaskScheduler) {
            ScheduledExecutorService scheduledExecutorService = this.threadPoolTaskScheduler.getScheduledExecutor();
            if (!scheduledExecutorService.isShutdown()) {
                scheduledExecutorService.shutdownNow();
            }

            this.threadPoolTaskScheduler.destroy();
        }

        if (null != cron&& cron.trim().length() > 0) {
            this.threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
            this.threadPoolTaskScheduler.setThreadNamePrefix("timedTask ");
            this.threadPoolTaskScheduler.initialize();
            this.threadPoolTaskScheduler.schedule(this, new CronTrigger(cron));
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,Spring Boot定时任务可以在运行过程中中途关闭和重启。这可以通过以下方式实现: 1. 使用Spring的@Scheduled注解来定义定时任务,然后在代码中通过注入TaskScheduler或ScheduledTaskRegistrar来取消或重新调度任务。例如: ``` @Component public class MyTask { @Scheduled(fixedDelay = 1000) public void doTask() { // 任务逻辑 } } @Component public class TaskManager { @Autowired private TaskScheduler taskScheduler; private ScheduledFuture<?> scheduledFuture; public void startTask() { if (scheduledFuture == null || scheduledFuture.isCancelled()) { scheduledFuture = taskScheduler.schedule(new MyTask()::doTask, new Trigger() { @Override public Date nextExecutionTime(TriggerContext triggerContext) { // 返回下一次执行时间 } }); } } public void stopTask() { if (scheduledFuture != null) { scheduledFuture.cancel(true); } } } ``` 2. 使用Spring的TaskExecutor来执行定时任务,然后在代码中通过注入ThreadPoolTaskExecutor来关闭和重新创建线程池。例如: ``` @Component public class MyTask implements Runnable { @Override public void run() { // 任务逻辑 } } @Component public class TaskManager { @Autowired private ThreadPoolTaskExecutor threadPoolTaskExecutor; private ScheduledFuture<?> scheduledFuture; public void startTask() { if (scheduledFuture == null || scheduledFuture.isCancelled()) { scheduledFuture = threadPoolTaskExecutor.scheduleAtFixedRate(new MyTask(), 1000); } } public void stopTask() { if (scheduledFuture != null) { scheduledFuture.cancel(true); threadPoolTaskExecutor.shutdown(); threadPoolTaskExecutor.initialize(); } } } ``` 以上代码仅供参考,具体实现需要根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值