SpringBoot使用@Scheduled定时任务录入将要过期任务数据

简介: SpringBoot使用@Scheduled定时任务录入将要过期任务数据

项目场景:

定时任务在每天查找过期数据,并存入过期数据待查表。

一、定时任务的几种实现方式

在JAVA开发领域,目前可以通过以下几种方式进行定时任务:

1、Timer:jdk中自带的一个定时调度类,可以简单的实现按某一频度进行任务执行。提供的功能比较单一,无法实现复杂的调度任务。

2、ScheduledExecutorService:也是jdk自带的一个基于线程池设计的定时任务类。其每个调度任务都会分配到线程池中的一个线程执行,所以其任务是并发执行的,互不影响。

3、Spring Task:Spring提供的一个任务调度工具,支持注解和配置文件形式,支持Cron表达式,使用简单且功能强大。

4、Quartz:一款功能强大的任务调度器,可以实现较为复杂的调度功能,如每月一号执行、每天凌晨执行、每周五执行等等,还支持分布式调度,就是配置稍显复杂。

二、SpringBoot中定时任务使用

1、引入依赖 只需要引入spring-boot-starter依赖就可以。

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
  </dependency>
</dependencies>


2、 开启定时任务

在需要开启定时任务的类上面加上@EnableScheduling注解即可开启定时任务。

@Service
@EnableScheduling 
public class CoreTask {
    private static Logger logger = LoggerFactory.getLogger(CoreTask.class);
@Autowired
    IManageLibraryService manageLibraryService;
    @Autowired
    ManageLibraryDao manageLibraryDao;
    @Scheduled(cron = "0 0 * * * *")
    public void findOutDate() {
        manageLibraryService.handle(LocalDate.now().plusDays(0).toString());
    }
    @Scheduled(cron = "0 58 23 * * ?")
//@Scheduled(cron = " 0/1 * * * * ?")
    public void scanLibraryOutDate() {
        //查询过期数据
        List<Map> outDateLists = manageLibraryService.queryOutDateList();
        outDateLists.forEach(item -> {
            Map map = new HashMap<>();
            map.put("valid", 0);
            map.put("id", item.get("id"));
//            manageLibraryDao.updateValid(map); //临时注释
//            manageLibraryDao.insertToLibraryOutDate(map);//临时注释
        });
    }
}

3. 创建定时任务

在要执行定时任务的方法上加上注解

@Scheduled(cron = " 0/1 * * * * ?") 这里是每秒执行一次

4. cron属性.

cron表达式属性如下:

second(秒), minute(分), hour(时),day of month(日),month(月),day of week(周几)

示例如下:

0 0 0 * * * – 每天零时执行一次

0 0/15 14,18 * * ? – 每天14点整和18点整,每隔15分钟执行一次

0 15 10 ? * 1-6 – 每个月的周一到周六 10:15分执行一次

0 0 2 ? * 6L – 每个月的最后一个周六凌晨2点执行一次

0 0 2 LW * ? – 每个月的最后一个工作日凌晨2点执行一次

0 0 2-4 ? * 1#1 – 每个月的第一个周一凌晨2点到4点期间,每个整点都执行一次

5. Cron表达式生成工具地址:http://qqe2.com/cron

6.sql语句

 select id FROM library  WHERE  date_add(validDate,interval (  SELECT period FROM  library_config ) month)< now();
 

DATE_ADD() 函数向日期添加指定的时间间隔。

语法

DATE_ADD(date,INTERVAL expr type)

date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。

type 参数可以是下列值:

Type 值:

MICROSECOND

SECOND

MINUTE

HOUR

DAY

WEEK

MONTH

QUARTER

YEAR

SECOND_MICROSECOND

MINUTE_MICROSECOND

MINUTE_SECOND

HOUR_MICROSECOND

HOUR_SECOND

HOUR_MINUTE

DAY_MICROSECOND

DAY_SECOND

DAY_MINUTE

DAY_HOUR

YEAR_MONTH

interval 1 month

追加一个月

DATE_ADD() 详细参考连接https://www.w3school.com.cn/sql/func_date_add.asp


相关文章
|
11月前
|
缓存 监控 Java
SpringBoot @Scheduled 注解详解
使用`@Scheduled`注解实现方法周期性执行,支持固定间隔、延迟或Cron表达式触发,基于Spring Task,适用于日志清理、数据同步等定时任务场景。需启用`@EnableScheduling`,注意线程阻塞与分布式重复问题,推荐结合`@Async`异步处理,提升任务调度效率。
1589 128
|
JSON Java 数据格式
微服务——SpringBoot使用归纳——Spring Boot返回Json数据及数据封装——封装统一返回的数据结构
本文介绍了在Spring Boot中封装统一返回的数据结构的方法。通过定义一个泛型类`JsonResult&lt;T&gt;`,包含数据、状态码和提示信息三个属性,满足不同场景下的JSON返回需求。例如,无数据返回时可设置默认状态码&quot;0&quot;和消息&quot;操作成功!&quot;,有数据返回时也可自定义状态码和消息。同时,文章展示了如何在Controller中使用该结构,通过具体示例(如用户信息、列表和Map)说明其灵活性与便捷性。最后总结了Spring Boot中JSON数据返回的配置与实际项目中的应用技巧。
1087 0
|
JSON Java 数据格式
Spring Boot返回Json数据及数据封装
在Spring Boot中,接口间及前后端的数据传输通常使用JSON格式。通过@RestController注解,可轻松实现Controller返回JSON数据。该注解是Spring Boot新增的组合注解,结合了@Controller和@ResponseBody的功能,默认将返回值转换为JSON格式。Spring Boot底层默认采用Jackson作为JSON解析框架,并通过spring-boot-starter-json依赖集成了相关库,包括jackson-databind、jackson-datatype-jdk8等常用模块,简化了开发者对依赖的手动管理。
913 3
|
Java 关系型数据库 MySQL
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
1116 2
|
Java Spring
如何优雅的实现 SpringBoot 并行任务
我是小假 期待与你的下一次相遇 ~
285 1
|
监控 Java 调度
SpringBoot中@Scheduled和Quartz的区别是什么?分布式定时任务框架选型实战
本文对比分析了SpringBoot中的`@Scheduled`与Quartz定时任务框架。`@Scheduled`轻量易用,适合单机简单场景,但存在多实例重复执行、无持久化等缺陷;Quartz功能强大,支持分布式调度、任务持久化、动态调整和失败重试,适用于复杂企业级需求。文章通过特性对比、代码示例及常见问题解答,帮助开发者理解两者差异,合理选择方案。记住口诀:单机简单用注解,多节点上Quartz;若是任务要可靠,持久化配置不能少。
1188 4
|
人工智能 安全 Java
Spring Boot 中使用 Function 和异步线程池处理列表拆分任务并汇总结果
在Java开发中,处理大规模数据时常常需要将列表拆分为多个子列表进行异步处理并汇总结果。本文介绍如何在Spring Boot中使用Function和异步线程池实现高效且可维护的代码,涵盖结果封装、线程池配置、列表拆分处理及结果汇总等关键步骤。
465 0
|
分布式计算 大数据 Java
springboot项目集成大数据第三方dolphinscheduler调度器 执行/停止任务
springboot项目集成大数据第三方dolphinscheduler调度器 执行/停止任务
354 0
|
缓存 Java 数据库
SpringBoot系统启动任务(三十二)的方式(上)
SpringBoot系统启动任务(三十二)的方式(上)
388 0
SpringBoot系统启动任务(三十二)的方式(上)