Java Web项目中编写定时任务的实现
发布时间 - 2026-01-10 22:45:59 点击率:次之前在的公司有专门的任务调度框架,需要使用的时候引个jar包加个配置和注解就可以使用了,还有专门的平台来维护运行的机器及监控执行状态等等。

现在突然没了这个工具,而又要写定时任务,该怎么办呢?
对于非Web应用来说,我们可以使用Quartz,使用简单,功能强大。
对于Java Web应用来说,当然也可以使用Quartz(有一篇介绍了方法:https://www./article/104105.htm),但是还有更方便的工具,那就是spring自带的支持定时任务功能。
Spring的定时任务在spring-context中,简单配置的模板如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd"> <task:scheduler id="scheduler" pool-size="200"/> <task:scheduled-tasks> <!-- 你的task --> <task:scheduled ref="xxxTask" method="execute" cron="0 0 * * * ?"/> </task:scheduled-tasks> <task:annotation-driven scheduler="scheduler"/> </beans>
其中task:scheduler指定了执行定时任务使用的scheduler,默认使用的是
org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
task:annotation-driven允许使用@Async和@Scheduled注解;
task:scheduler-tasks中定义了一个个task,其中执行周期可以使用cron表达式,还可指定延时或频率等方式。
有一个转换cron的在线工具挺好用,推荐给大家(注意这里可能会显示7个字符,去掉最后一个*即可):http://tools./code/Quartz_Cron_create
接下来还有一个问题,通常我们的线上环境是集群环境,有多台机器,而这些定时任务通常只需要在一台上执行,如何来进行控制呢?
目前想到两种办法,分享给大家:
1. 使用Redis全局缓存
https://www./article/104111.htm
2. 通过判断文件的方式
通过判断某文件是否存在,来决定是否执行任务(是否加载任务对应的spring配置文件),参考代码:
@Component
public class XxxListener implements ApplicationContextAware {
// 防止加载多次
private static final AtomicInteger INIT_LOCK = new AtomicInteger(0);
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if (INIT_LOCK.incrementAndGet() > 1) {
// 类已加载过
return;
}
Resource resource = applicationContext.getResource("classpath:<标识文件>");
if (!resource.exists()) {
// 文件不存在,不启动
return;
}
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(applicationContext);
context.setConfigLocations("classpath:spring/job.xml");
context.refresh();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# java
# web实现定时任务
# web实现定时器
# web定时执行任务
# Java循环调用多个timer实现定时任务
# Java下SpringBoot创建定时任务详解
# Java定时任务的三种实现方式
# Java实现终止线程池中正在运行的定时任务
# 在Java Web项目中添加定时任务的方法
# java 中Spring task定时任务的深入理解
# Java定时任务详解
# java 动态增加定时任务示例
# java定时任务Timer和TimerTask使用详解
# Java如何实现定时任务
# 可以使用
# 加载
# 的是
# 两种
# 给大家
# 推荐给
# 不存在
# 线上
# 还有一个
# 没了
# 只需要
# 还可
# 在一
# 自带
# 更方便
# 配置文件
# 多台
# 大家多多
# 要写
# 是否存在
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
Laravel Docker环境搭建教程_Laravel Sail使用指南
Laravel怎么在Blade中安全地输出原始HTML内容
香港服务器选型指南:免备案配置与高效建站方案解析
JavaScript如何操作视频_媒体API怎么控制播放
利用JavaScript实现拖拽改变元素大小
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
如何快速上传自定义模板至建站之星?
JavaScript如何实现路由_前端路由原理是什么
大连 网站制作,大连天途有线官网?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
如何基于PHP生成高效IDC网络公司建站源码?
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
javascript日期怎么处理_如何格式化输出
利用vue写todolist单页应用
如何在腾讯云免费申请建站?
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
如何快速重置建站主机并恢复默认配置?
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
如何用西部建站助手快速创建专业网站?
香港服务器部署网站为何提示未备案?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
网站制作壁纸教程视频,电脑壁纸网站?
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
如何自定义建站之星模板颜色并下载新样式?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
nodejs redis 发布订阅机制封装实现方法及实例代码
如何正确选择百度移动适配建站域名?
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
如何用PHP快速搭建CMS系统?
如何快速搭建高效香港服务器网站?
如何破解联通资金短缺导致的基站建设难题?
三星、SK海力士获美批准:可向中国出口芯片制造设备
如何在建站主机中优化服务器配置?
如何为不同团队 ID 动态生成多个非值班状态按钮
详解jQuery停止动画——stop()方法的使用
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例
用yum安装MySQLdb模块的步骤方法
如何用JavaScript实现文本编辑器_光标和选区怎么处理
如何用AI帮你把自己的生活经历写成一个有趣的故事?
Laravel如何实现事件和监听器?(Event & Listener实战)

