SpringSchedule - 定时任务(注解方式)

简介: SpringSchedule - 定时任务(注解方式)


我所知道的java定时任务的几种常用方式:

1、spring schedule注解的方式

2、spring schedule配置文件的方式

3、java类继承TimerTask

 

注解方式:

1、使用maven创建spring项目,schedule在spring-context.jar的包下边,因此需要导入与之相关的包;同时,我配的是spring web项目,也同时导入了spring-web和spring-webmvc的包,如下:

<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.1.7.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.1.6.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.1.6.RELEASE</version></dependency>

maven导包配置只需要如下就好,其他相关的依赖,maven会自行解决。

 

2、配置spring项目的基础文件spring.xml

<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns:task="http://www.springframework.org/schema/task"xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/taskhttp://www.springframework.org/schema/task/spring-task-3.1.xsd"><!--开启定时任务--><task:annotation-driven/><!--开启注解--><context:annotation-config/><!--指定相关的包路径--><context:component-scanbase-package="scheduleTest"/></beans>

3、编写java业务代码,需要在类声明上边添加@Component注解,并在需要定时任务执行的方法声明上添加@Scheduled(cron = "0/5 * * * * ?")注解以及相关的参数。

参数使用可以参考 SpringSchedule - 定时任务(参数示例:Cron表达式),我示例中表示每五秒执行一次:

packagescheduleTest;
importjava.text.SimpleDateFormat;
importjava.util.Date;
importorg.springframework.scheduling.annotation.Scheduled;
importorg.springframework.stereotype.Component;
/*** spring定时器1*/@ComponentpublicclassScheduleTest {
@Scheduled(cron="0/5 * * * * ?")
publicvoidschTest1() {
Datedate=newDate();
SimpleDateFormatsim=newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");
StringdateStr=sim.format(date);
System.out.println("这是spring定时器1,每五秒执行一次,当前时间:"+dateStr);
    }
}

4、web项目的基础配置文件web.xml

<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID"version="3.0"><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring.xml</param-value></context-param><listener><description>spring监听器</description><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener></web-app>

上边的配置中使用了spring的上下文监听器,在这种情况下项目启动后,spring.xml中的定时任务配置才会生效。但是这不是唯一的方法,也可以使用如下的配置,启动项目后可以看到一样的效果:

<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID"version="3.0"><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring.xml</param-value></context-param><servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>

这里是吧spring的监听器换成了mvc的调度器,在调度器加载的时候就运行spring.xml中的定时任务配置,因此启动项目后看到效果一样。如果把上边的监听器和mvc的调度器一起配在这里,会看到启动项目后同一时间内这个定时任务需要执行的业务会执行两次。

 

转自:https://blog.csdn.net/tuzongxun/article/details/51576301


目录
相关文章
|
移动开发 缓存 JavaScript
2021最新阿里代码规范(前端篇)
2021最新阿里代码规范(前端篇)
56790 11
2021最新阿里代码规范(前端篇)
|
6月前
|
运维 安全 网络安全
等保测评全面解析
等保测评是依据国家信息安全等级保护制度,对信息系统安全保护状况进行检测评估的活动。其目标是确保信息系统在各阶段符合安全等级要求,保障系统保密性、完整性和可用性。测评涵盖技术与管理两方面:技术层面包括物理环境、网络通信、设备计算及应用数据安全;管理层面涉及制度、机构、人员及建设运维管理。测评流程分为准备、方案设计、现场测评和报告编制四个阶段。实践中需做好测评前准备、测评中配合以及测评后整改优化,以持续提升信息安全水平。
623 0
|
缓存 分布式计算 负载均衡
构建高效可扩展的后端系统架构
【2月更文挑战第9天】本文将介绍如何构建一种高效可扩展的后端系统架构,以满足不断增长的用户需求和应对大规模并发请求。我们将讨论关键的技术要点,包括分布式计算、负载均衡、缓存和数据库优化等,帮助读者在设计和开发后端系统时做出明智的决策。
302 7
|
监控 小程序 前端开发
排队免单小程序开发源码案例
“排队免单小程序”旨在通过用户排队行为结合特定规则为用户提供免单或优惠机会,提升用户体验及商家流量。核心功能包括用户注册登录、排队管理、免单规则设置、支付与结算、商家管理和通知提醒等。技术上采用微信小程序开发框架,前后端分离架构,集成微信支付等服务,确保高效安全的数据处理与传输。项目开发过程涵盖需求分析、设计开发、集成测试和上线发布,后期注重数据监控、用户反馈和运营推广,以持续优化用户体验。
|
存储 Serverless Python
`quad()` 函数是 `scipy.integrate` 模块中的一个函数,用于计算一维函数的数值积分。其基本语法如下:
`quad()` 函数是 `scipy.integrate` 模块中的一个函数,用于计算一维函数的数值积分。其基本语法如下:
|
人工智能 自然语言处理 小程序
【工具】Excel竟然也能搞AI,快来玩转chatexcel
ChatExcel是由北京大学团队开发的一款人工智能办公辅助工具,用户可通过自然语言与Excel表格互动,简化数据处理任务,如排序、求和等,无需手动编写公式或函数。本文介绍了ChatExcel的功能特点、使用方法及实操步骤,展示了如何通过简单指令完成复杂操作,提高工作效率。此外,还提供了新手指南帮助快速上手。
1812 0
【工具】Excel竟然也能搞AI,快来玩转chatexcel
|
SQL 关系型数据库 MySQL
1.Mysql 安装配置和使用
1.Mysql 安装配置和使用
171 1
1.Mysql 安装配置和使用
|
传感器 自动驾驶 安全
无人驾驶汽车对人民的出行方式和生活方式产生了深远的影响
无人驾驶汽车对人民的出行方式和生活方式产生了深远的影响
无人驾驶汽车对人民的出行方式和生活方式产生了深远的影响
|
测试技术 计算机视觉 网络架构
【YOLOv8改进 - 特征融合】CARAFE:轻量级新型上采样算子,助力细节提升
【YOLOv8改进 - 特征融合】CARAFE:轻量级新型上采样算子,助力细节提升
|
SQL JSON 数据库
在线JSON转SQL工具
JSON文件中的数据或者JSON对象转换为SQL插入语句,方便用户将数据导入到数据库中。
1964 2