欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > SSM与SpringBoot项目中实现定时任务处理

SSM与SpringBoot项目中实现定时任务处理

2025/11/2 21:13:25 来源:https://blog.csdn.net/2201_75490194/article/details/144487628  浏览:    关键词:SSM与SpringBoot项目中实现定时任务处理

一、什么是定时任务

定时任务是指在 特定时间点时间间隔 执行的任务。在实际项目中,我们经常需要定时执行一些操作,比如:

  • 定时清理临时文件
  • 定时更新缓存
  • 定时生成报表
  • 定时检查状态并更新

二、在SSM项目中实现定时任务

2.1 添加依赖

首先在pom.xml中添加Spring Task相关依赖:

<dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>6.1.12</version>
</dependency>

2.2 配置定时任务支持

在Spring配置文件(如spring-mybatis.xml)中添加task命名空间和注解驱动:

<!-- 添加task命名空间 -->
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="...http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd"<!-- 开启注解驱动 -->
<task:annotation-driven/>

2.3 创建定时任务配置类【可选】

@Configuration
@EnableScheduling
public class TaskConfig {/*** 配置定时任务线程池* 默认情况下,Spring使用单线程执行定时任务* 通过配置线程池可以实现多个任务并行执行*/@Beanpublic ThreadPoolTaskScheduler taskScheduler() {ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();// 设置线程池大小scheduler.setPoolSize(5);// 设置线程名前缀scheduler.setThreadNamePrefix("task-");// 等待所有任务完成再关闭线程池scheduler.setWaitForTasksToCompleteOnShutdown(true);// 设置等待时间scheduler.setAwaitTerminationSeconds(60);return scheduler;}
} 

2.4 创建定时任务处理类

@Component
@Slf4j
public class EventStatusTask {private final EventMapper eventMapper;@Scheduled(cron = "0 */5 * * * *")public void updateExpiredEventStatus() {try {int count = eventMapper.updateExpiredEventStatus();if (count > 0) {log.info("成功更新{}个过期事件状态", count);}} catch (Exception e) {log.error("更新过期事件状态失败", e);}}
}

三、Cron表达式详解

Cron表达式是一个字符串,包含6或7个域,用空格分隔,每个域代表一个含义

秒  分  时  日   月   周   []
0   0   9  12   102024
2024年10月12日上午9点整 对应的cron表达式为:0 0 9 12 102024

常用示例:

  • 0 */5 * * * * : 每5分钟执行一次
  • 0 0 * * * * : 每小时整点执行
  • 0 0 0 * * * : 每天凌晨执行
  • 0 0 9,18 * * * : 每天上午9点和下午6点执行
  • 0 0/30 9-17 * * * : 朝九晚五工作时间内每半小时执行

特殊字符说明:

  • * : 表示所有值
  • / : 表示增量值
  • -: 表示范围
  • ,: 表示多个值
  • ? : 用于日期和星期字段,表示不指定具体值

这Cron表达式的语法简单记忆一下就行,现在很多工具可以帮助我们快速生成这个Cron表达式
例如:在线Corn表达式生成器
在这里插入图片描述

四、在SpringBoot中实现定时任务

SpringBoot中实现定时任务更加简单,主要有以下步骤:

4.1 添加依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId>
</dependency>

4.2 开启定时任务

在启动类上添加@EnableScheduling注解:

@SpringBootApplication
@EnableScheduling
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

4.3 创建定时任务

@Component
@Slf4j
public class TaskService {@Scheduled(cron = "0 */5 * * * *")public void scheduledTask() {log.info("定时任务执行...");}// 固定延迟执行,上一次执行完成后延迟5秒@Scheduled(fixedDelay = 5000)public void fixedDelayTask() {log.info("固定延迟任务");}// 固定频率执行,每5秒执行一次@Scheduled(fixedRate = 5000)public void fixedRateTask() {log.info("固定频率任务");}
}

五、最佳实践建议

  1. 合理设置执行频率,避免任务执行时间过长影响系统性能
  2. 添加 try-catch 异常处理,避免任务异常影响其他功能
  3. 添加日志记录,方便追踪任务执行情况
  4. 对于重要任务考虑添加执行结果通知机制
  5. 在分布式系统中需要考虑任务重复执行问题
  6. 对于耗时任务考虑使用异步执行

六、总结

无论是 SSM 还是 SpringBoot 项目,Spring 框架都为我们提供了便捷的定时任务实现方式。相比之下,SpringBoot的配置更加简单,但核心概念是一致的。在实际应用中,我们需要根据具体需求选择合适的执行方式,并注意性能和异常处理等问题。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词