网站页面设计工作流程,邯郸有没有专门做写字楼的网站,谷歌seo查询,做网站还是小程序Spring Task 简介 
Spring Task 是 Spring 框架原生自带的任务调度框架#xff0c;它犹如一把瑞士军刀#xff0c;为开发者提供了丰富多样的功能#xff0c;助力轻松创建和管理定时任务。相较于其他一些第三方任务调度框架#xff0c;Spring Task 最大的优势在于其与 Sprin…Spring Task 简介 
Spring Task 是 Spring 框架原生自带的任务调度框架它犹如一把瑞士军刀为开发者提供了丰富多样的功能助力轻松创建和管理定时任务。相较于其他一些第三方任务调度框架Spring Task 最大的优势在于其与 Spring 生态系统的无缝集成。这意味着开发者能够在 Spring 应用中自如地运用依赖注入、事务管理等强大特性使得代码的编写过程更加流畅后期维护也更为便捷。例如在一个电商系统中我们可以利用 Spring Task 定时更新商品库存信息同时借助依赖注入获取商品服务层的实例实现业务逻辑的高效处理。 
添加依赖 在非 Spring Boot 的 Spring 项目中需要添加 spring-context 依赖 
Spring Boot 项目中无需添加依赖 
dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion${spring.version}/version
/dependency 
开启定时任务 
若要在 Spring 项目中启用定时任务功能首要步骤是在配置类或主启动类上添加EnableScheduling注解。 
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;Configuration
EnableScheduling
public class AppConfig {// 配置类中的其他配置如数据源配置、Bean的定义等
} 
在上述代码中AppConfig类通过添加Configuration注解表明这是一个配置类而EnableScheduling注解则通知 Spring 容器开始扫描并注册所有带有定时任务注解的方法为后续的定时任务执行做好准备。 
基于 Spring Boot 主启动类 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;SpringBootApplication
EnableScheduling
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
} 
对于 Spring Boot 项目在主启动类Application上添加SpringBootApplication注解它整合了Configuration、EnableAutoConfiguration和ComponentScan等多个注解的功能而EnableScheduling注解的加入则开启了定时任务的支持。当应用启动时Spring 容器会自动扫描整个项目识别并注册符合条件的定时任务。 
添加了这个注解后Spring 容器就如同一个敏锐的观察者会自动扫描并注册所有带有定时任务注解的方法为后续定时任务的执行搭建好了舞台。 
Scheduled 注解实现定时任务 
在 Spring Task 的工具库中最常用的定时任务定义方式当属使用Scheduled注解。我们只需将这个注解添加到想要定时执行的方法上Spring 就会严格按照我们指定的规则如同忠诚的守护者一般在合适的时间点准时调用这个方法。 
例如创建一个简单的定时任务每隔 5 秒输出一条日志记录系统的运行状态代码如下 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;Component
public class SimpleTask {private static final Logger logger  LoggerFactory.getLogger(SimpleTask.class);Scheduled(fixedRate  5000)public void executeTask() {logger.info(定时任务执行了当前时间为{}, System.currentTimeMillis());}
} 
在上述代码中Scheduled(fixedRate  5000)表示这个方法会以固定的速率执行每 5000 毫秒即 5 秒执行一次。每次任务执行时都会在日志中记录下 “定时任务执行了” 以及当前的时间戳方便开发者追踪任务的执行情况。 
执行策略 
cron 表达式 
cron表达式堪称任务执行时间定义的魔法咒语它以一种极为灵活且强大的方式来精准控制任务的执行时间。它由 6 或 7 个空格分隔的时间字段组成从左到右分别表示秒、分、时、日、月、周以及年年字段为可选。 
例如要在每天的凌晨 2 点整执行任务对数据库进行日常备份确保数据的完整性配置如下 
Scheduled(cron  0 0 2 * * *)
public void dailyTask() {// 数据库备份逻辑例如调用数据库备份工具或执行SQL语句
} 下面是一些常用的cron表达式示例帮助开发者更好地理解和运用 
0 0 12 * *?每天中午 12 点整执行适用于在中午进行数据统计或报表生成的场景。 
0 15 10 * *?每天上午 10 点 15 分执行可用于在工作时间开始时更新系统数据或发送通知。 
0 0/5 * * *?每隔 5 分钟执行一次常用于实时数据监控或缓存更新的场景。 
fixedDelay 
fixedDelay表示上一次任务执行完毕后间隔指定的时间再执行下一次任务。例如设置fixedDelay  3000意味着上一次任务执行完成后系统会耐心等待 3 秒然后再启动下一次任务。这种策略适用于任务执行时间不固定但希望每次执行之间有一定间隔的场景比如在数据采集任务中每次采集完成后需要一定时间处理数据处理完后再进行下一次采集。 
Scheduled(fixedDelay  3000)
public void taskWithFixedDelay() {// 数据采集或其他任务执行逻辑
} fixedRate 
fixedRate表示按照固定的时间间隔执行任务无论上一次任务是否执行完毕。例如设置fixedRate  5000表示每隔 5 秒就会启动一次任务如同一个精准的时钟不管前一次任务的状态如何都会按时触发下一次任务。这种策略适用于需要持续周期性执行的任务比如定时向服务器发送心跳包以保持连接。 
Scheduled(fixedRate  5000)
public void taskWithFixedRate() {// 发送心跳包或其他周期性任务执行逻辑
} 
initialDelay 
initialDelay用于指定在应用启动后延迟多长时间再执行第一次任务。它通常与fixedRate或fixedDelay一起使用为任务的首次执行提供了灵活的控制。 
例如应用启动后延迟 2 秒然后每隔 5 秒执行一次任务可用于在系统初始化完成后再开始执行周期性任务。 
Scheduled(initialDelay  2000, fixedRate  5000)
public void taskWithInitialDelay() {// 系统初始化后的周期性任务执行逻辑
} 
异步使用 
在某些复杂的业务场景下我们可能期望定时任务能够异步执行避免阻塞主线程确保系统的高并发性能和响应速度。Spring Task 充分考虑到了这一需求提供了完善的异步执行支持。 
首先需要在配置类中启用异步任务支持添加EnableAsync注解 
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;Configuration
EnableScheduling
EnableAsync
public class AppConfig {// 配置类中的其他配置如线程池配置等
} 在上述代码中EnableAsync注解告诉 Spring 容器开启异步任务的功能允许方法在独立的线程中执行。同时我们还可以在配置类中进一步配置线程池的参数如线程池的大小、最大线程数等以优化异步任务的执行效率。 
然后在需要异步执行的定时任务方法所在的类上添加Async注解 import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;Component
Async
public class AsyncTask {Scheduled(fixedRate  5000)public void asyncExecuteTask() {// 异步任务执行逻辑例如调用远程服务或进行复杂计算}
} 
当asyncExecuteTask方法被调用时它会在一个单独的线程池中执行如同在后台默默工作的助手不会干扰主线程的正常运行从而确保系统在处理定时任务的同时能够高效地响应其他用户请求。