使用注解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)变更表达式,需要重启服务