SpringBoot使用SpringTask实现定时任务

SpringBoot整合SpringTask定时任务 Springboot整合SpringTask定时任务定时任务介绍一、市场上实现定时任务方案有很多种如下:1、使用jdk的Timer和TimerTask实现 可以实现简单的间隔执行任务,无法实现按日历去调度执行任务。 2、使用Quartz实现 Quartz 是一个异步任务调度框架,功能丰富,可以实现按日历调度。 3、使用Spring Task实现 Spring 3.0后提供Spring Task实现任务调度,支持按日历调度,相比Quartz功能稍简单,但是在开发基本够用,支 持注解编程方式。 本项目案例使用S 阅读详情

Spring Task:Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多

 

创建任务类

任务类上添加@EnableScheduling注解来开启对计划任务的支持

在开启对计划任务的支持后,需要@Scheduled注解的配合。@Scheduled是方法上注解,添加该注解的方法即为单个计划任务。

import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component // 使spring管理
@EnableScheduling // 定时任务注解
public class TestTask {
	
	//使用cron属性可按照指定时间执行,本例指的是每1分钟执行一次;
	@Scheduled(cron = "0 0/1 * * * ?")
	public void test1() {
        System.out.println("[" + Thread.currentThread().getName() + "]" + "-----------test1-----------");
	}
	
	//使用cron属性可按照指定时间执行,本例指的是每1分钟执行一次;
	@Scheduled(cron = "0 0/1 * * * ?")
	public void test2() {
        System.out.println("[" + Thread.currentThread().getName() + "]" + "-----------test2-----------");
	}
	
}

输出结果如下:

[pool-2-thread-1]-----------test1-----------
[pool-2-thread-1]-----------test2-----------

 

SpringTask默认是单线程的,可以看到使同一个线程中执行两个定时任务,输出结果是正常的。但是如果任务增多,一个任务卡死,会导致其他任务也无法执行。

 

解决方案:设置多线程

import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;  

@Configuration //表明该类是一个配置类
@EnableAsync //开启异步事件的支持
public class AsyncConfig {

    @Bean
    public Executor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        //核心线程数10
        executor.setCorePoolSize(10);//线程池创建时候初始化的线程数
        //最大线程数20
        executor.setMaxPoolSize(20);//线程池最大的线程数,只有在缓冲队列满了之后才会申请超过核心线程数的线程
        //缓冲队列200 
        executor.setQueueCapacity(200);//用来缓冲执行任务的队列
        //允许线程的空闲时间60秒
        executor.setKeepAliveSeconds(60);//当超过了核心线程出之外的线程在空闲时间到达之后会被销毁
        //线程池名的前缀
        executor.setThreadNamePrefix("taskExecutor-");//设置好了之后可以方便我们定位处理任务所在的线程池
        
        executor.setWaitForTasksToCompleteOnShutdown(true);//用来设置线程池关闭的时候等待所有任务都完成再继续销毁其他的Bean
        executor.setAwaitTerminationSeconds(60);//该方法用来设置线程池中任务的等待时间,如果超过这个时候还没有销毁就强制销毁,以确保应用最后能够被关闭,而不是阻塞住
        
        //线程池对拒绝任务的处理策略
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());//这里采用了CallerRunsPolicy策略,当线程池没有处理能力的时候,该策略会直接在 execute 方法的调用线程中运行被拒绝的任务;如果执行程序已关闭,则会丢弃该任务
        return executor;
    }
	
}

然后在定时任务的类或者方法上添加@Async。最后重启项目,每一个任务都是在不同的线程中

输出结果如下:

[taskExecutor-1]-----------test1-----------
[taskExecutor-2]-----------test2-----------

SpringBoot集成SpringTask执行定时任务 第一步:.yml文件添加配置: testTask: doTask: cron: 0 6 20 ? * * 第二步:新建配置文件spring-task.xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/... 阅读详情

相关推荐

Astah 9.0升级步骤(Widnows/Mac OS)

Astah Professional是一款全新的轻量级UML建模工具。软件集思维导图和UML建模于一体,采用100%纯JAVA构建, 兼容性强,不仅能够实现分布式建模、项目合并,还能够实现和其它建模工具的交互。

tequiero777的博客 2828

spring boot task实现动态创建定时任务

spring boot task实现动态创建定时任务

a2226701325的博客 1460

新出的智谱GLM-4.7很牛逼?

Zhipu AI(智谱)最近发布的 GLM-4.7 再次刷新了开源大模型的天花板。作为一款约 400B 参数规模的 MoE 模型,它不仅在传统的代码与推理任务上超越了 DeepSeek-V3.2 和 Kimi-K2 等强力对手,更通过**“保留思考(Preserved Thinking)”和“交错思考(Interleaved Thinking)”**等架构级创新,重新定义了 Agentic Workflow 的设计范式。

kakaZhui的博客 2401

深入解析:Spring Boot 集成 Spring Task 实现高效定时任务

Spring Task 提供了多种方式来定义定时任务,每种方式都有其独特的应用场景和优势。默认情况下,Spring Task 使用单线程执行任务。这种设计虽然简单,但在高并发场景下可能会成为性能瓶颈。为了提升任务的并发处理能力,你可以通过实现接口来自定义线程池。@Override// 设置线程池大小为10在这个例子中,我们创建了一个实例,并通过方法将其线程池大小设置为 10。这意味着,你的任务可以同时在 10 个线程中并发执行,从而显著提升任务的处理效率。

1015

画个板子玩一玩STM32F030F4P6,也许是最便宜的32bit MCU

前言,什么是STM32F030F4P6 STM32目前最便宜的芯片之一应该就是这一块,STM32F030F4P6,这一个芯片没有USB,但是其他都有,引脚少,价格低廉,如果找不到原厂,可以买替代的国产芯片,性能也一样。 不管怎么样也是Cortex-M0,比8bit和16bit的性能都强,总的来说就是低价,引脚少,体积小的同时,还容易开发,有很多模拟输入可玩,还有SPI,硬件I2C等等 所以,这一款MCU真的是从理论来说又便宜又好用,非常适合把玩。 画个板,最小系统 STM32F030其..

arenascat的博客 2万+

python后端的支付宝小程序用户认证问题(alipay-sdk-python、pycrypto无法安装)

python后端的支付宝小程序用户认证问题(alipay-sdk-python、pycrypto无法安装) 写在前面 事先说明,本人不是大佬,我只是在不断探索的途中找到了解决这个问题的方法,之前在网上搜索的时候没有看到相关文章,所以就来简单讲一下。 正文 借着蚂蚁金服小程序大赛开通了支付宝小程序个人开发者,尝试将一个微信小程序的项目移植到支付宝上,支付宝对于用户唯一id的获取比微信要复杂很多,微信...

weixin_43102379的博客 3644

SpringCore完整学习教程6,入门级别

在上下文中没有Executor bean的情况下,Spring Boot会自动配置一个ThreadPoolTaskExecutor,它具有合理的默认值,可以自动关联到异步任务执行(@EnableAsync)和Spring MVC异步请求处理。 如果你在上下文中定义了自定义Executor,常规任务执行(即@EnableAsync)将透明地使用它,但不会配置Spring MVC支持,因为它需要AsyncTaskExecutor实现(名为applicationTaskExecutor)。Spring测试框架

nanshaws的博客 441

基于STM32的馆藏文物保存环境监测系统设计与实现

针对馆藏文物保存环境中温湿度、光照、有害气体等参数波动易导致文物损坏的问题,本文设计了一种基于STM32微控制器的馆藏文物保存环境监测系统。该系统以STM32L431RCT6为核心,集成高精度传感器实现多参数实时采集,通过有线与无线结合的通信方式构建监测网络,具备数据存储、异常预警、远程监控等功能。测试结果表明,系统温湿度测量精度分别达±0.2℃、±2%RH,光照与有害气体检测误差≤5%,可满足文物保存环境的高精度监测需求,为文物保护提供科学的数据支撑。

m0_74026776的博客 1543

spring task定时任务

在项目中开发定时任务应该-种比较常见的需求,在Java中开发定时任务主要有三种解决方案: 一是使用JDK自带的,二是使用第三方组件,三是使用。Timer是JDK自带的定时任务工具其简单易用,但是对于复杂的定时规则无法满足,在实际项目开发中也很少使用到。Quartz 功能强大,但是使用起来相对笨重。而Spring Task则具备前两者的优点(功能强大且简单易用),使用起来很简单,除Spring相关的包外不需要额外的包,而且支持注解和配置文件两种形式。(1)在xml文件中添加task命名空间,并且开启定时任务注

rqt1013_的博客 1315

COMSOL仿真避坑指南:列管反应器模拟中多孔介质与化学反应设置的5个常见错误

本文详细解析了COMSOL仿真中列管反应器模拟的5个常见错误,包括多孔介质模型选择、化学反应接口配置、对流扩散方程处理、薄层热阻设置及网格独立性验证。特别针对多孔介质与化学反应设置的误区,提供了实用的判断标准和修正方法,帮助工程师避免计算偏差,提升仿真精度。

weixin_29597551的博客 325

Unreal5.6从入门到精通之 如何实现MetaHuman数字人

本文介绍了使用HYPER3D-ChatAvatar网站生成3D头部模型,并导入Unreal Engine制作数字人的完整流程。首先上传照片生成头部模型(约2分钟),设置参数后下载模型文件。然后在UE5.6中创建项目,激活MetaHuman插件,导入头部模型并调整肤色、面部特征和身体模板。通过MetaHuman Creator组装数字人蓝图,支持添加音频/视频动画功能。关键步骤包括:取消Rigging选项节省时间、切换英文模式避免材质问题、使用Live Link Face应用实现面部捕捉等。整个流程约需5-1

TxNet 1353

Spring Task—定时任务

Spring Task—定时任务详解

weixin_46278059的博客 1708

2024年11月架构设计师案例分析真题回顾,附参考答案、解析及所涉知识点(二)

软考高级系统架构设计师考试包含三个科目:信息系统综合知识、案例分析和系统架构设计论文。考试形式为机考。本文主要回顾2024年下半年(2024-11-10)系统架构设计师考试上午第二科案例分析的题目,同时附带参考解答、解析和所涉知识点。

一几文的编程学习笔记。 1664

SpringBoot的定时任务实现--SpringTask

SpringBoot的定时任务实现--SpringTask

qq_30624649的博客 938

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

springboot使用SpringTask实现定时任务

SpringTask是Spring自主研发的轻量级定时任务工具,相比于Quartz更加简单方便,且不需要引入其他依赖即可使用。 只需要在配置类中添加一个@EnableScheduling注解即可开启SpringTask的定时任务能力。 package com.xc.mall2.config; import org.springframework.context....

weixin_30902675的博客 198

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SpringBoot整合SpringTask实现定时任务

前因 温馨提醒:阅读本文需要6分钟 半藏商城中会有一些用户提交了订单但是一直没有支付的情况,之前我是通过quartz定时任务每天的5点扫描未支付订单然后读取用户的邮箱地址发送邮件提醒用户尽快支付。这次我是采用Spring中自带的SpringTask来进行定时任务。 Cron表达式 Cron表达式是一个字符串,包括6~7个时间元素,在SpringTask中可以用于指定任务的执行时间。 Cron的语法格式 Seconds Minutes Hours DayofMonth Month DayofWeek Cr

在无人区看超市的博客 430

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SpringBoot三种方式实现定时任务

SpringBoot三种方式实现定时任务 定时任务实现的三种方式: Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。 ScheduledExecutorService:也jdk自带的一个类;是基于线程池设计的定时任务类,每个调度任务都...

longzhongxiaoniao的博客 4万+

SpringBoot几种定时任务的实现方式

原文地址:SpringBoot几种定时任务的实现方式 定时任务实现的几种方式: Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。 ScheduledExecutorService:也jdk自带的一个类;是基于线程池设计的定时任务类,

wqh8522的博客 16万+

springboot中实现定时任务(最方便简单)

在springboot中实现定时任务最简单的方式就是使用来实现,接下来具体讲解下使用步骤!

weixin_45151960的博客 1354

【SpringBoot专题】SpringBoot快速集成Spring Task实现定时任务

【SpringBoot专题】SpringBoot集成Spring Task快速实现定时任务 🕌背景 在很多业务场景需要我们某一特定的时刻去做某件任务,这些任务是时间驱动的,因此定时任务解决的就是这种业务场景。 ♨️技术选型 快速实现的定时任务 Timer:是一个定时器类,通过该类可以为指定的定时任务进行配置。TimerTask类是一个定时任务类,该类实现了Runnable接口,缺点异常未检查会中止线程 ScheduledExecutorService:相对延迟或者周期作为定时任务调度,缺点没有绝对的

Java白羊的博客 628

Spring Boot 实现定时任务的 4 种方式

定时任务实现的几种方式: Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。 ScheduledExecutorService:也jdk自带的一个类;是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。 Spring Task:Spring3.0以后自带的task,可以将它看成一个轻

诚的博客 464

Spring Boot-实现定时任务的 4 种方式

作者:Wan QingHua wanqhblog.top/2018/02/01/SpringBootTaskSchedule/ 定时任务实现的几种方式: Timer:这是 java 自带的 java.util.Timer 类,这个类允许你调度一个 java.util.TimerTask 任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。 ScheduledExecutorService:也 jdk 自带的一个类;是基于线程池设计的定时任务类, 每个调度任务都会分配到.

嘻哈熊的专栏 3522

SpringBoot实现定时任务

springboot整合定时任务大概的内容就是这样,后续还有内容会继续补充。

zkk的博客 288

定时任务实现的几种方式

目录使用Timer使用ScheduledExecutorService使用Spring Task简单的定时任务多线程执行执行时间的配置cron表达式详解整合Quartz最后定时任务实现的几种方式:这个目前在项目中用的较少,直接贴demo代码。具体的介绍可以查看api 使用ScheduledExecutorService 该方法跟Timer类似,直接看demo: 使用Spring Task 简单的定时任务 在SpringBoot项目中,我们可以很优雅的使用注解来实现定时任务,首先创建项目,导入依

ZgqJava优快云的博客 1706
上一篇: Maven多模块项目+SpringBoot,编译失败:程序包xxx不存在
下一篇: JAVA开发注意事项总结,持续更新
github_39325328
博客等级 码龄9年 34粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值