使用注解Scheduled创建定时任务
/*** 普通注解式定时任务 demo*/
@Component
public class ScheduledTaskAnnotationDemo {
/*** 日志*/private static final Logger LOGGER = LoggerFactory.getLogger(ScheduledTaskAnnotationDemo.class);@Scheduled(cron = "0/2 * * * * ?")public void scheduledTask01() {
LOGGER.info("注解式启动 task 01 当前线程 {} ", Thread.currentThread().getName());//此处调用需要执行的任务代码}@Scheduled(cron = "0/3 * * * * ?")public void scheduledTask02() {
LOGGER.info("注解式启动 task 02 当前线程 {} ", Thread.currentThread().getName());//此处调用需要执行的任务代码 }
}
备注 :支持配置文件添加表达式
注意:
需要在启动类或者在定时任务类上加 @EnableScheduling 才会执行定时任务
@Scheduled 属性介绍
package org.springframework.scheduling.annotation;import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.scheduling.annotation.Schedules;@Target({
ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(Schedules.class)
public @interface Scheduled {
//根据cron表达式执行String cron() default "";//指定时间地区,默认系统时间地区String zone() default "";//上一次执行成功后多少毫秒后执行long fixedDelay() default -1L;//同上,只不过值是String形式String fixedDelayString() default "";//固定速率执行long fixedRate() default -1L;//同上,只不过值是String形式String fixedRateString() default "";//延迟多少毫秒后执行long initialDelay() default -1L;//同上,只不过值是String形式String initialDelayString() default "";
}
总结
优点:代码简单,适用于快速开发
缺点:
1) 表达式写死,不利于扩展
2)变更表达式,需要重启服务