根据数据库查询出时间,确定定时任务执行时间cron

本文介绍如何在 Spring Boot 应用中实现定时任务,包括使用 @EnableScheduling 和 SchedulingConfigurer 接口,通过 Runnable 和 Trigger 实现自定义定时任务,并提供了 Cron 表达式的转换方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Scheduling @Component这两个注解要记得加,我的@EnableScheduling加载启动类了,定时任务类就不用加了 

实现SchedulingConfigurer 类,重写configureTasks方法,里面有个添加触发器任务addTriggerTask,这个的源码

他就是需要一个Runnable启动一个线程,执行目标任务,一个Trigger触发器,设置定时时间。

因为cron的表达式是这样的:@Scheduled(cron = "0/1 * * * * ?")

所以要转换一下。因为spring-boot这个cron表示式没有年份,所以没有yyyy

Date->String(cron)

public class CronUtils {
    private static final SimpleDateFormat sdf = new SimpleDateFormat("ss mm HH dd MM ?");

    /***
     *  功能描述:日期转换cron表达式
     * @param date
     * @return
     */
    public static String getCron(Date date) {
        String formatTimeStr = null;
        if (Objects.nonNull(date)) {
            formatTimeStr = sdf.format(date);
        }
        return formatTimeStr;
    }
}
定时任务
    @Component
    class TestTask implements SchedulingConfigurer {

        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                // 定时任务要执行的内容
                System.out.println("【开始执行定时任务。。。bbbbbbbbb】");
            }
        };

        Trigger trigger = new Trigger() {
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
               // String cron = "0/1 * * * * ?"; //可以将表达式配置在数据库中
                String cron =  CronUtils.getCron(new Date(1607222391000l));
                System.out.println("cron:"+cron);
                return new CronTrigger(cron).nextExecutionTime(triggerContext);
            }
        };
        
        @Override
        public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
            taskRegistrar.addTriggerTask(runnable, trigger);
            }
    }

 结果:

【开始执行定时任务。。。bbbbbbbbb】
cron:51 39 10 06 12 ?
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值