1、在启动类Application.class中添加注解
@MapperScan("com.example.myjpa.dao")//mybatis的注解
@EnableScheduling//定时器注解
@SpringBootApplication@EnableSchedulingpublic class MyApplication { public static void main(String[] args) {
SpringApplication.run(MyjpaApplication.class, args);
}
}2、创建ScheduledTasks.class做定时任务,添加注解
@Configuration //1.主要用于标记配置类,兼备Component的效果。
@EnableScheduling // 2.开启定时任务
@Configuration //1.主要用于标记配置类,兼备Component的效果。@EnableScheduling // 2.开启定时任务public class ScheduledTasks { private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); //表示定时器时间定义方式
//@Scheduled(cron = "0/5 * * * * ?")
//@Scheduled(fixedRate = 1000 * 60)
@Scheduled(cron = "0 0/2 * * * ?") public void configureTasks() {
System.out.println("The time is now " + dateFormat.format(new Date()));
}
}3、创建config定时器配置CompleteScheduleConfig.class,添加注解
@Configuration
@EnableScheduling
@Configuration@EnableSchedulingpublic class CompleteScheduleConfig implements SchedulingConfigurer { @Autowired
StudentRepository studentRepository; private static String DEFAULT_CRON = "0 0/2 * * * ?";//表示间隔2分钟
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {// scheduledTaskRegistrar.scheduleFixedDelayTask(new FixedDelayTask(() -> {//// }, 10000, 1000 * 60));
scheduledTaskRegistrar.addTriggerTask(() -> {
Student student = new Student();
student.setName("ok");
student.setAge(12);
student.setSex("nan");
studentRepository.save(student);
System.out.println("===插入成功!===");
}, triggerContext -> { return new CronTrigger(DEFAULT_CRON).nextExecutionTime(triggerContext);
});
}
}注:这个案例主要是通过定时利用JPA操作数据的方式进行代码编写案例(案例是进行每隔2分钟就插入一条数据),在开发项目中假如数据刷新我们可以用定时任务完成、股票类数据刷新等等。所以定时任务在后台任务中也是一个重点。
cron表达式
大家可以进入这里测试cron在线表达式生成工具
本篇案例中"0 0/2 * * * ?"是表示每个2分钟运行一次。
认识cron表达式
| 名词 | 范围 | 表达式 |
|---|---|---|
| 秒 | 0-59 | - * / |
| 分 | 0-59 | - * / |
| 时 | 0-23 | - * / |
| 日期 | 1-31 | - * ? / L W C |
| 星期 | 1-7或者 SUN-SAT | - * ? / L C # |
| 年(非必填) | 1970-2099 | - * / |
字符解析
| 表达式字符 | 注释 |
|---|---|
| ? | 表示所有值、不确定的值 |
| , | 表示附加数个可能的值 |
| - | 表示指定值的范围 |
| / | 表示指定从哪个值开始,然后按照哪个值进行递增,如i/j表示从i开始,每次按照j值进行递增 |
| L,late简写 | 表示在日时是这个最后一天,在周期时是表示这个月最后一个星期几 |
| W weekday简写 | 表示离给定日期最近的工作日(周一到周五) |
| # | 表示这个月第几个周几,如:6#3表示这个月第3个周五(6表示周五,3表示的是第3个) |
举例
| 表达式 | 注解 |
|---|---|
| "0/1000 * * * * ?" | 每1000秒执行一次 |
| */1000 * * * * ? | 每隔1000秒执行一次 |
| "0 0 10 * * ?" | 每天10点整执行一次 |
| 0 0 5-15 * * ? | 每天5-15点整点执行一次 |
| 0 0/30 9-18 * * ? | 早上9点到下午18点工作时间内每半小时执行一次 |
| 0 0 12 ? * WED | 每个星期三中午12点执行 |
| 0 0 18 ? * TUES,THUR,SAT | 每周二、四、六下午6点执行一次 |
| "20,30,40 * * * * ?" | 每20秒,30秒,40秒时执行一次 |
| "0 15 10 L * ?" | 表示每个月最后一天的10点15分0秒执行一次 |
| "0 15 10 LW * ?" | 表示每个月最后一个工作日的10点15分0秒执行一次 |
作者:eirunye
链接:https://www.jianshu.com/p/c00f0b5b54a0



