准备.导入依赖
maven导入依赖,大多数的项目早已经导入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
定时任务主要有两种方法,注解法和动态生成法,下面我们一一介绍:
注解法
1.启用类上启用定时
在启动类加上注解@EnableScheduling即可
@SpringBootApplication
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
2.功能类上添加定时
@Component
public class ScheduleTask {
@Scheduled(cron="*/6 * * * * ?")
public void reportCurrentTime() {
System.out.println("输出的时间:" + dateFormat.format(new Date()));
}
}
- 被定时的方法不能带参
- 在线生成cron网址
动态生成法
1,启动定时
下面的方法里我们从数据库里读取一个cron表达式,然后开启一个发送邮件的定时任务
@Component
@Configuration //1.主要用于标记配置类,兼备Component的效果。
@EnableScheduling // 2.开启定时任务
//以上两个注解我们可以参考注解法的第一步直接在启动类配置替代
public class EmailSchedule implements SchedulingConfigurer {
@Autowired
private OaDailyMapper oaDailyMapper; //注入mapper
@Autowired
private EmailPost emailPost; //发送邮件任务
/**
* 执行定时任务.
*/
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addTriggerTask(
//1.添加任务内容(Runnable)
() -> {
emailPost.sendMail("测试","您好,感谢您能观看我的博客","yourmail@qq.com");
},
//2.设置执行周期(Trigger)
triggerContext -> {
String cron = oaDailyMapper.getCornById();//从数据库获取cron
return new CronTrigger(cron).nextExecutionTime(triggerContext);
//返回执行周期(Date)
}
);
}
}
写的很简单,如果还未能解决大家的疑惑,欢迎大家观看以下大神的优秀博客