(六)springboot入门之定时任务动态管理

个人公众号【爱做梦的锤子】,全网同id,个站 http://te-amo.site,欢迎关注,里面会分享更多有用知识,还有我的私密照片

###写在前面的
在实际开发中定时任务的执行计划都不是固定的,根据不同的实际情况会指定不同的任务开启时间,停止时间,以及执行频率,所以动态的管理定时任务是一种实际开发中常见的设计。
###一、动态管理定时任务说明
使用Quartz来实现定时任务的管理是比较简单的,但是本次我们将使用Spring提供ThreadPoolTaskScheduler来实现,由于现在还未对Quartz深入学习,所以对Quartz不做过多解释。
ThreadPoolTaskScheduler是TaskScheduler接口的默认实现类,能够开启线程池进行任务调度,支持设置线程数,默认为单线程。
ThreadPoolTaskScheduler 通过schedule方法,添加定时任务和触发器后,会得到一个ScheduledFuture<?>类型的返回值,这个返回值可作为控制任务的开关。
###二、使用ThreadPoolTaskScheduler实现定时任务管理
示例代码如下:

@Component
public class DynamicTask {
    private static Logger logger = Logger.getLogger(DynamicTask.class.getName());
    @Autowired
    private ThreadPoolTaskScheduler threadPoolTaskScheduler;
    private ScheduledFuture<?> task;

	//采用注入的方式创建ThreadPoolTaskScheduler 
    @Bean
    public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
        return new ThreadPoolTaskScheduler();
    }

	//任务开始
    public void startTask() {
        task = threadPoolTaskScheduler.schedule(new Runnable() {
            @Override
            public void run() {
                logger.info(new Date()+"0/2 * * * * *");
            }
        }, new CronTrigger("0/2 * * * * *"));
        logger.info("开始任务!");
    }
	//任务停止
    public String stopTask() {

        if (task != null) {

            task.cancel(true);

        }

        logger.info("任务停止!");

        return "stopCron";

    }
	//更改计划,可以将更改的执行计划作为参数传入
    public void changePlan() {
        stopTask();
        task = threadPoolTaskScheduler.schedule(new Runnable() {
            @Override
            public void run() {
                logger.info(new Date()+"*/5 * * * * *");
            }
        }, new CronTrigger("*/5 * * * * *"));
        logger.info("改变任务!");
    }
}

以上代码只是一个简单的示例,更多的应用,大家根据实际情况来设计

个人公众号【爱做梦的锤子】,全网同id,个站 http://te-amo.site,欢迎关注,里面会分享更多有用知识,还有我的私密照片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值