【第20章】spring-mvc之定时任务

文章目录

  • 前言
  • 一、开启
    • 1. 打开开关
    • 2. 定时任务类
    • 3. 执行结果
  • 二、定时任务线程池
    • 1.定义线程池
    • 2.开启异步
    • 3. 定时任务类
    • 4. 执行结果
  • 三、cron
  • 总结


前言

定时任务是项目中比较常见的功能,常用于定时发送消息、拉取数据、数据备份等;

为什么要放到SpringMvc中来写呢,因为spring项目原来都是编码完成,写个测试类执行下,执行完成程序就结束了,也就是说程序无法持续地提供服务,SpringMvc可以借助容器,我们可以提供7*24不间断服务,执行定时任务也就不在话下了。


一、开启

1. 打开开关

package org.example.springmvc.config;/*** Create by zjg on 2024/4/27*/
@Configuration
@EnableWebMvc
@EnableScheduling
public class WebConfig implements WebMvcConfigurer {
}

2. 定时任务类

package org.example.springmvc.task;import lombok.extern.log4j.Log4j2;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;/*** Create by zjg on 2024/5/5*/
@Log4j2
@Component
public class TaskServer {@Scheduled(cron = "0 */1 * * * *")public void task1(){//每分钟1次log.debug("task1");}@Scheduled(cron = "0 */10 * * * *")public void task2(){//每10分钟1次log.debug("task2");}@Scheduled(cron = "0 0 * * * *")public void task3(){//每小时1次log.debug("task3");}
}

3. 执行结果

[2024-05-05 16:00:00.005][pool-3-thread-1][DEBUG]- org.example.springmvc.task.TaskServer.task2(TaskServer.java:19) - task2
[2024-05-05 16:00:00.006][pool-3-thread-1][DEBUG]- org.example.springmvc.task.TaskServer.task1(TaskServer.java:15) - task1
[2024-05-05 16:00:00.006][pool-3-thread-1][DEBUG]- org.example.springmvc.task.TaskServer.task3(TaskServer.java:23) - task3

二、定时任务线程池

不知道大家注意到上面的结果没有,上面的三个任务都是同一个线程去执行的,要是第一个任务很慢的话,那后面的定时任务就只能等着,我们使用线程池来解决这个问题。

1.定义线程池

<!--定时任务线程池-->
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"><property name="corePoolSize" value="5"/><property name="maxPoolSize" value="10"/><property name="queueCapacity" value="25"/>
</bean>

2.开启异步

@Configuration
@EnableWebMvc
@EnableScheduling
@EnableAsync
public class WebConfig implements WebMvcConfigurer {
}

3. 定时任务类

package org.example.springmvc.task;import lombok.extern.log4j.Log4j2;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;/*** Create by zjg on 2024/5/5*/
@Log4j2
@Component
@Async
public class TaskServer {@Scheduled(cron = "0 */1 * * * *")public void task1(){//每分钟1次log.debug("task1");}@Scheduled(cron = "0 */10 * * * *")public void task2(){//每10分钟1次log.debug("task2");}@Scheduled(cron = "0 0 * * * *")public void task3(){//每小时1次log.debug("task3");}
}

4. 执行结果

[2024-05-05 17:00:00.013][taskExecutor-5][DEBUG]- org.example.springmvc.task.TaskServer.task3(TaskServer.java:25) - task3
[2024-05-05 17:00:00.013][taskExecutor-1][DEBUG]- org.example.springmvc.task.TaskServer.task1(TaskServer.java:17) - task1
[2024-05-05 17:00:00.013][taskExecutor-2][DEBUG]- org.example.springmvc.task.TaskServer.task2(TaskServer.java:21) - task2

三、cron

关于周日的设计就很包容,0或7是周日,或者你直接写英文也是可以的。

在这里插入图片描述

Cron 表达式描述
* * * * * * 每秒钟执行一次
0 */1 * * * *每分钟执行一次
0 */10 * * * *每10分钟执行一次
0 0/30 * * * *每半小时执行一次
0 0 * * * *每小时执行一次
0 0 0 * * *每天执行一次
0 0 8-10 * * *每天8,9,10点执行一次
0 0 6,19 * * *每天6,19点执行一次
0 0/30 8-10 * * *每天8:00, 8:30, 9:00, 9:30, 10:00 and 10:30 执行一次
0 0 0 1 * *月初第一天执行一次
0 0 0 L * *月底最后一天执行一次
0 0 0 1 1 *1月月初第一天执行一次
0 0 0 L 12 *12月月底最后一天执行一次
0 0 0 ? * 5#2一个月的第二个星期五
0 0 0 ? * MON#1一个月的第一个星期一

总结

回到顶部
官方文档
官方cron
cron表达式
【第23章】spring-async(异步)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/10343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (四)

基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;四&#xff09; 大家继续看 https://lilianweng.github.io/posts/2023-06-23-agent/的文档内容 第三部分&#xff1a;工具使用 工具的使用是人类的一个显着而显着的特征。我们创造、修改和利用外部物体来完成超…

开发一款抓大鹅游戏

你抓大鹅第二关过了吗&#xff1f;近期,经常在身边听见这样的疑问。作为本月的爆款游戏&#xff0c;抓大鹅以简单的消消乐玩法、动感的音乐、易上手的操作方式、简单易懂的游戏规则吸引了大量玩家。就像2022年的羊了个羊&#xff0c;2021年的合成大西瓜&#xff0c;但它们确实非…

20240511,谓词,内建函数对象

拜托铠甲勇士真的帅好不好&#xff01;&#xff01;&#xff01; STL案例2-员工分组 10个员工&#xff0c;指派部门&#xff0c;员工信息&#xff08;姓名&#xff0c;工资组成&#xff0c;部门&#xff1a;策划&#xff0c;美术&#xff0c;研发&#xff09;&#xff0c;随机…

【gpedit.msc】组策略编辑器的安装,针对windows家庭版,没有此功能

创建一个记事本文件然后放入以下内容 echo offpushd "%~dp0"dir /b %systemroot%\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >gp.txtdir /b %systemroot%\servicing\Packages\Microsoft-Windows-GroupPolicy-…

[框架] Unity 公共执行器

本篇我们通过使用单例模式来创建一个公共执行器&#xff0c;使得原本应该在Update()、FixedUpdate()中的指令都可以统一放在一个对象中执行&#xff0c;且可进行添加和移除操作。 1. 创建单例模式改造器&#xff1a;SingletonMono 我们先创建一个单例模式改造器&#xff0c;使…

2024数维杯

截至我所知的信息&#xff08;2023年&#xff09;&#xff0c;“数维杯”并不是一个广泛认知的赛事名称&#xff0c;至少在主流的学术、教育或科技竞赛领域中没有明确对应的赛事。这可能是指某个特定领域或地区的竞赛&#xff0c;也可能是一个新兴的比赛或者非正式的称谓。 如…

SSM【Spring SpringMVC Mybatis】——Mybatis

目录 1、初识Mybatis 1.1Mybatis简介 1.2 官网地址 2、搭建Mybatis框架 2.1 准备 2.2 搭建Mybatis框架步骤 1. 导入jar包 2. 编写核心配置文件【mybatis-config.xml】 3. 书写相关接口及映射文件 4. 测试【SqlSession】 2.3 添加Log4j日志框架 导入jar包 编写配置文…

ERA5数据的区别

ERA5 hourly data on single levels from 1940 to present 链接 ERA5是欧洲中期天气预报中心(ECMWF)的第五代全球气候和天气再分析产品&#xff0c;涵盖过去80年的数据。数据可从1940年开始获取&#xff0c;ERA5取代了ERA-Interim再分析产品。 再分析将全球范围内的模型数据与…

详解drop,delete,truncate区别

在SQL中&#xff0c;"DROP"、"DELETE"和"TRUNCATE"是用于删除数据的不同命令&#xff0c;它们之间有一些重要的区别&#xff1a; DROP&#xff1a; DROP用于删除数据库对象&#xff0c;例如删除表、视图、索引、触发器等。使用DROP删除的对象将…

27.哀家要长脑子了!---栈与队列

1.739. 每日温度 - 力扣&#xff08;LeetCode&#xff09; 用单调栈的方法做&#xff1a; 从左到右遍历数组&#xff1a; 栈中存放的是下标&#xff0c;每个温度在原数组中的下标&#xff0c;从大到小排列&#xff0c;因为这样才能确保的是最近一天的升高温度 如果栈为空&am…

Vue面试经验2

Vue 你说你在vue项目中实现了自定义指令&#xff0c;如何实现 全局指令在main.js入口文件中实现 使用方法&#xff1a;v-指令名称 每个钩子函数都有两个参数&#xff08;ele,obj&#xff09; ele:绑定指令的元素 obj:指令的一些信息&#xff08;比如绑定指令的值&#xff0c…

速盾:如何选择适合自己的网络安全解决方案?

选择适合自己的网络安全解决方案是非常重要的&#xff0c;因为网络安全问题涉及到个人隐私和重要数据的保护。在选择网络安全解决方案时&#xff0c;需要考虑以下几个方面&#xff1a; 网络规模和需求&#xff1a;首先要了解自己的网络规模和需求&#xff0c;包括网络设备的数量…

虚表,虚函数习题

6. 关于虚表说法正确的是&#xff08;d &#xff09; A&#xff1a;一个类只能有一张虚表 多重继承 B&#xff1a;基类中有虚函数&#xff0c;如果子类中没有重写基类的虚函数&#xff0c;此时子类与基类共用同一张虚表 即使子类重写了基类的虚函数&#xff0c;此时子类与…

探索生产者/消费者模式:解决并发编程中的资源竞争

序言 在并发编程中&#xff0c;资源竞争是一个常见的问题。为了有效地管理资源并确保线程安全&#xff0c;需要采用一些有效的方法。其中之一是生产者/消费者模式&#xff0c;它是一种经典的并发设计模式&#xff0c;用于解决生产者和消费者之间的协作问题。本文将深入探讨生产…

Ansible playbook

playbook playbook介绍 playbooks是ansible用于配置&#xff0c;部署&#xff0c;和管理被控节点的剧本。通过playbooks的详细描述&#xff0c;执行其中的tasks&#xff0c;可以让远端主机达到预期的状态。playbooks是由一个或多个”play”组成的列表。 当对一台机器做环境初…

conan2 基础入门(02)-安装

conan2 基础入门(02)-安装 文章目录 conan2 基础入门(02)-安装⭐前言⭐安装python安装安装包安装自行操作 ⭐验证配置环境变量命令行验证conan配置文件 END ⭐前言 Conan 2.0: C and C Open Source Package Manager 官方提供三种安装conan的方式。分别为&#xff1a; Recommen…

MYSQL SQL优化思路和方法

MYSQL SQL优化思路和方法 一、优化SQL的一般步骤1.1 了解各种SQL执行频率1.2 定位执行效率较低SQL1.3 Explain分析低效SQL执行计划1.4 确定问题并采取相应的优化措施 二、索引问题2.1 索引的存储分类2.2 如何使用索引2.2.1 使用索引2.2.2 存在索引但不使用索引2.2.3 查看索引使…

Vue3:路由

1. 路由简介 在Vue3中&#xff0c;路由是一个核心概念&#xff0c;特别是在构建单页面应用程序&#xff08;SPA&#xff09;时。以下是Vue3中路由的基本概念&#xff1a; 1. **路由&#xff08;Route&#xff09;**&#xff1a;在Vue3中&#xff0c;路由是指根据特定的规则将用…

行业新应用:电机驱动将成为机器人的动力核心

电机已经遍布当今社会人们生活的方方面面&#xff0c;不仅应用范围越来越广&#xff0c;更新换代的速度也日益加快。按照工作电源分类&#xff0c;可以将它划分为直流电机和交流电机两大类型。直流电机中&#xff0c;按照线圈类型分类&#xff0c;又可以分为有铁芯的电机、空心…

java日常选择题

题目来自牛客网 1.以下哪个接口的定义是正确的?() A interface B { void print() {} ;} B interface B { static void print();} C.abstract interface B extends A1, A2 //A1、A2为已定义的接口 {abstract void print(){};} D.interface B { void print(); 选D&#xff0c;因…