Java 基于SchedulingConfigurer接口来实现定时任务

Java SchedulingConfigurer来实现定时任务

	写这个博客的来记录的由来是,再工作中因为原先都是使用注解的方式来实现定时任务的实现,比如@Scheduled,
首先这个方式比较方便的,但它是静态的,也就是单线程的,所以当有多个任务运行的时候,有可能该定时任务会
受到其他任务的影响,所以我一般在工作中都是使用基于接口实现的定时任务,这是动态的,也就是基于接口SchedulingConfigurer。

废话不多说,直接上代码:

@Configuration
@Component
public class QuestionScheduledTask implements SchedulingConfigurer {

    @Resource
    private QuestionDao questionDao;

    private static Logger logger = LoggerFactory.getLogger(PaperScheduledTask.class);

    /**
     * 每天早上5点进行这个定时任务
     */
    private String cron = "0 0 5 * * ?";

    @Transactional(rollbackFor = RuntimeException.class)
    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
        scheduledTaskRegistrar.addTriggerTask(() -> {
            // 定时任务要执行的内容
            logger.info("【-----开始执行定时任务-----】");
            
			/**
			*  中间就是写具体的业务逻辑
			*/
			
            // 定时任务结束
            logger.info("【---------------结束定时任务-------------】");
        }, triggerContext -> {
            // 定时任务触发,可修改定时任务的执行周期
            CronTrigger trigger = new CronTrigger(cron);
            return trigger.nextExecutionTime(triggerContext);
        });
    }
}

另外你还需要了解cron表达式来进行执行周期的确定:

0 * * * * ?1分钟触发一次

0 0 * * * ?    				每天每1小时触发一次

0 0 10 * * ?   				每天10点触发一次
		
0 * 14 * * ?   				在每天下午2点到下午2:59期间的每1分钟触发

0 30 9 1 * ?   				每月1号上午9点半

0 15 10 15 * ?   			每月15日上午10:15触发

*/5 * * * * ?    			每隔5秒执行一次

0 */1 * * * ? 				每隔1分钟执行一次

0 0 5-15 * * ? 				每天5-15点整点触发

0 0/3 * * * ? 				每三分钟触发一次

0 0-5 14 * * ? 				在每天下午2点到下午2:05期间的每1分钟触发

0 0/5 14 * * ? 				在每天下午2点到下午2:55期间的每5分钟触发

0 0/5 14,18 * * ? 			在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发

0 0/30 9-17 * * ? 			朝九晚五工作时间内每半小时

0 0 10,14,16 * * ? 			每天上午10点,下午2点,40 0 12 ? * WED 				表示每个星期三中午120 0 17 ? * TUES,THUR,SAT 	每周二、四、六下午五点

0 10,44 14 ? 3 WED 			每年三月的星期三的下午2:102:44触发

0 15 10 ? * MON-FRI 		周一至周五的上午10:15触发

0 0 23 L * ? 				每月最后一天23点执行一次

0 15 10 L * ? 				每月最后一日的上午10:15触发

0 15 10 ? * 6L 				每月的最后一个星期五上午10:15触发

0 15 10 * * ? 2005 			2005年的每天上午10:15触发

0 15 10 ? * 6L 2002-2005 	2002年至2005年的每月的最后一个星期五上午10:15触发

0 15 10 ? * 6#3 			每月的第三个星期五上午10:15触发
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值