网站域名的作用是什么,宁夏住房和城乡建设厅网站首页,wordpress 首页 矩阵,网页浏览器怎么清除缓存✨Spring Task简介
Spring Task 是 Spring 提供的轻量级定时任务工具#xff0c;也就意味着不需要再添加第三方依赖了#xff0c;相比其他第三方类库更加方便易用。可以按照约定的时间自动执行某个代码逻辑。
使用场景#xff1a;
信用卡每月还款提醒银行贷款每月还款提醒…✨Spring Task简介
Spring Task 是 Spring 提供的轻量级定时任务工具也就意味着不需要再添加第三方依赖了相比其他第三方类库更加方便易用。可以按照约定的时间自动执行某个代码逻辑。
使用场景
信用卡每月还款提醒银行贷款每月还款提醒火车票售票系统处理未支付订单入职纪念日为用户发送通知
只要是需要定时处理的场景都可以使用Spring Task ✨Spring Task中的cron表达式
cron表达式其实就是一个字符串通过cron表达式可以定义任务触发的时间。
构成规则分为6或7个域由空格分开每个域代表一个含义 秒 分 时 日 月 周 年 每个域的含义分别为秒分钟小时日月周年可选
注意周 和 日 不能同时出现若一定要同时出现则其中一个必须为“ ”因为会产生冲突
特殊字符
*代表所有可能的值?不指定值用于日和周字段表示不关心具体值-指定一个范围,列出多个值/指定增量L表示最后一个例如月的最后一个星期日W表示最接近指定日期的工作日#表示第几个例如周的第几个星期日
更详细的 Cron 表达式示例
0 0 12 * * ?每天中午12点触发0 15 10 ? * MON-FRI周一至周五每天上午10:15触发0 0/5 * * * ?每5分钟触发0 0 1,12 * * ?每天凌晨1点和中午12点触发0 10 1 * * 6L每个月的最后一个星期五上午10:10触发0 0 10 ? * 2#3每个月的第三个星期二上午10:00触发
✨基于 Scheduled 注解的使用
1、导入maven坐标spring-context一般是已经存在的
dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion${spring.version}/version
/dependency
2、启动类添加注解EnableScheduling开启任务调度
SpringBootApplication
EnableScheduling //开启定时任务
public class MyApplication {// ...
}
3、创建定时任务采用注解的方式主要是cron表达式
Component
public class ScheduledTasks {private static final SimpleDateFormat dateFormat new SimpleDateFormat(HH:mm:ss);// 每5秒执行一次Scheduled(fixedRate 5000)public void fixedRateTask() {System.out.println(Fixed Rate Task : dateFormat.format(new Date()));}// 每分钟执行一次Scheduled(cron 0 * * * * ?) // 注意此处纠正了cron表达式public void cronTask() {System.out.println(Cron Task : dateFormat.format(new Date()));}// 上一次任务执行完成后延迟10秒再执行Scheduled(fixedDelay 10000)public void fixedDelayTask() {System.out.println(Fixed Delay Task : dateFormat.format(new Date()));try {Thread.sleep(5000); // 模拟任务执行时间} catch (InterruptedException e) {e.printStackTrace();}}// 使用字符串配置更灵活支持占位符Scheduled(fixedRateString ${my.fixedRate}) // application.properties 中配置 my.fixedRate6000public void fixedRateStringTask() {System.out.println(Fixed Rate String Task : dateFormat.format(new Date()));}
}
✨基于 SchedulingConfigurer 接口的使用
Configuration
public class TaskSchedulerConfig implements SchedulingConfigurer {Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {taskRegistrar.setScheduler(taskExecutor());}Bean(destroyMethodshutdown)public Executor taskExecutor() {ScheduledThreadPoolExecutor executor new ScheduledThreadPoolExecutor(5); // 设置线程池大小为5executor.setRemoveOnCancelPolicy(true); // 设置取消策略executor.setThreadNamePrefix(MyScheduled-); // 设置线程名前缀return executor;}
}
✨异步任务
为了避免阻塞主线程可以将耗时的定时任务设置为异步执行。
Component
public class AsyncScheduledTasks {AsyncScheduled(fixedRate 5000)public void asyncTask() {// ... 执行耗时操作 ...}
}Configuration
EnableAsync // 开启异步任务支持
public class AsyncConfig implements AsyncConfigurer {// ... 配置异步任务线程池 ...
} ✨使用案例
1、首先启动类添加注解EnableScheduling
SpringBootApplication
EnableTransactionManagement //开启注解方式的事务管理
Slf4j
EnableCaching //开启注解方式的事务管理
EnableScheduling //开启任务调度
public class SkyApplication {public static void main(String[] args) {SpringApplication.run(SkyApplication.class, args);log.info(server started);}
}2、task定时方法
Component
Slf4j
public class MyTask {/***定时任务每5秒执行一次*/Scheduled(cron0/5 * * * * ?)public void executeTask(){log.info(定时任务开始执行{},new Date());}
}运行结果每5秒执行一次 总结
综上所述Spring Task是Spring框架中非常强大且灵活的任务调度工具。它提供了简单易用的注解和配置方式支持基于cron表达式的定时任务调度和异步任务处理。通过合理配置和使用Spring Task开发者可以轻松地实现各种复杂的定时任务需求。 参考链接https://blog.csdn.net/weixin_64178283/article/details/142874340