千家信息网

如何理解Java spring定时任务

发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,这篇文章主要讲解了"如何理解Java spring定时任务",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何理解Java spring定时任务"吧!目
千家信息网最后更新 2024年11月26日如何理解Java spring定时任务

这篇文章主要讲解了"如何理解Java spring定时任务",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何理解Java spring定时任务"吧!

目录
  • 一、定时任务

    • 1、cron表达式

    • 2、cron示例

    • 3、SpringBoot整合

  • 总结

    一、定时任务

    1、cron表达式

    语法:秒 分 时 日 月 周 年

    (其中"年"Spring不支持,也就是说在spring定时任务中只能设置:秒 分 时 日 月 周)


    2、cron示例


    3、SpringBoot整合

    @EnableScheduling

    @Scheduled

    实例:

    package com.xunqi.gulimall.seckill.scheduled;import lombok.extern.slf4j.Slf4j;import org.springframework.scheduling.annotation.Async;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;import java.util.concurrent.TimeUnit;/** * @Description: * @Created: with IntelliJ IDEA. * @author: 夏沫止水 * @createTime: 2020-07-09 18:49 **//** * 定时任务 *      1、@EnableScheduling 开启定时任务 *      2、@Scheduled开启一个定时任务 * * 异步任务 *      1、@EnableAsync:开启异步任务 *      2、@Async:给希望异步执行的方法标注 */@Slf4j@Component@EnableSchedulingpublic class HelloScheduled {    /**     * 1、在Spring中表达式是6位组成,不允许第七位的年份     * 2、在周几的的位置,1-7代表周一到周日     * 3、定时任务不该阻塞。默认是阻塞的     *      1)、可以让业务以异步的方式,自己提交到线程池     *              CompletableFuture.runAsync(() -> {     *         },execute);     *     *      2)、支持定时任务线程池;设置 TaskSchedulingProperties     *        spring.task.scheduling.pool.size: 5     *     *      3)、让定时任务异步执行     *          异步任务     *     *      解决:使用异步任务 + 定时任务来完成定时任务不阻塞的功能     *     */     @Scheduled(cron = "*/1 * * * * ?")     public void hello() {         log.info("hello...");         try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); }     }}

    定时任务默认是阻塞的线程,也就是说即使你设置成每一秒执行一次,但是方法内部的业务时间需要5秒才能执行完,也会造成定时任务每6秒才能执行一次。

    当然我们可以开启异步线程:

    @EnableAsync

    @Async

    实例:

    package com.xunqi.gulimall.seckill.scheduled;import lombok.extern.slf4j.Slf4j;import org.springframework.scheduling.annotation.Async;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;import java.util.concurrent.TimeUnit;/** * @Description: * @Created: with IntelliJ IDEA. * @author: 夏沫止水 * @createTime: 2020-07-09 18:49 **//** * 定时任务 *      1、@EnableScheduling 开启定时任务 *      2、@Scheduled开启一个定时任务 * * 异步任务 *      1、@EnableAsync:开启异步任务 *      2、@Async:给希望异步执行的方法标注 */@Slf4j@Component@EnableAsync@EnableSchedulingpublic class HelloScheduled {    /**     * 1、在Spring中表达式是6位组成,不允许第七位的年份     * 2、在周几的的位置,1-7代表周一到周日     * 3、定时任务不该阻塞。默认是阻塞的     *      1)、可以让业务以异步的方式,自己提交到线程池     *              CompletableFuture.runAsync(() -> {     *         },execute);     *     *      2)、支持定时任务线程池;设置 TaskSchedulingProperties     *        spring.task.scheduling.pool.size: 5     *     *      3)、让定时任务异步执行     *          异步任务     *     *      解决:使用异步任务 + 定时任务来完成定时任务不阻塞的功能     *     */     @Async     @Scheduled(cron = "*/1 * * * * ?")     public void hello() {         log.info("hello...");         try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); }     }}

    这样就会开启异步线程,并且是非阻塞线程,因为每次都会开启一个线程来执行,我们可以看一下源码配置的截图,这个就是异步执行的默认配置,核心线程数是8,最大线程数是无限大,这时如果一直每秒执行一次,则会造成服务器资源耗尽。

    当然,我们可以在配置文件中进行定时任务线程池的设定:

    #核心线程数

    spring.task.execution.pool.core-size=20

    #最大线程数

    spring.task.execution.pool.max-size=50

    #队列大小

    spring.task.execution.pool.queue-capacity=10000

    感谢各位的阅读,以上就是"如何理解Java spring定时任务"的内容了,经过本文的学习后,相信大家对如何理解Java spring定时任务这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

    任务 线程 阻塞 表达式 业务 方法 学习 支持 配置 最大 也就是 也就是说 代表 位置 内容 功能 实例 就是 年份 方式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 转行软件开发学哪个方向 计算机平面设计与网络技术哪个好 数据库中动态特征和静态特征 计算机网络技术专业知识 软件开发方向和目标 河北石家庄软件开发有限公司 金融押运系统软件开发公司 网络安全知识专题总结 数据库创建约束sql语句 网络技术运用演讲 不可下载的视频服务器 全民经纪人软件开发 一般项目中的软件开发 丁恒春互联网科技 服务器路由和远程访问 企业管理软件开发服务平台 自研数据库排行榜 邯郸计算机应用软件开发哪家正规 列举五种网络服务器并介绍其功能 命运28tick服务器 如何实现不同运营商的服务器访问 it软件开发去哪里学 文山软件开发费用 宝塔面板重启服务器导致进不去 外币数据库真伪对比 南通市公安局网络安全陈杰 润和软件开发有限公司 无线网络安全认证类型 如何保证数据库服务器的安全 资源服务器安全配置
    0