当前位置: 首页 > news >正文

Spring Boot 实现定时任务的案例

以下是一个使用 Spring Boot 实现定时任务的案例,涵盖了定时任务的基本配置和实现。
案例:定时发送邮件提醒
1. 添加依赖
在 pom.xml 中添加 Spring Boot 的依赖,以及邮件发送的相关依赖:

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

2. 配置定时任务
在 Spring Boot 的主类上启用定时任务:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;@SpringBootApplication
@EnableScheduling // 启用定时任务
public class ScheduledTaskApplication {public static void main(String[] args) {SpringApplication.run(ScheduledTaskApplication.class, args);}
}

3. 创建定时任务类
创建一个定时任务类,定义定时任务的方法:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;import java.util.Date;@Component
public class EmailReminderTask {@Autowiredprivate JavaMailSender mailSender;// 定义定时任务,每天早上 9 点执行@Scheduled(cron = "0 0 9 * * ?")public void sendDailyReminder() {SimpleMailMessage message = new SimpleMailMessage();message.setFrom("sender@example.com");message.setTo("recipient@example.com");message.setSubject("每日提醒");message.setText("这是您的每日提醒邮件,今天是 " + new Date());mailSender.send(message);System.out.println("每日提醒邮件已发送!");}
}

4. 配置邮件属性
在 application.properties 文件中配置邮件发送的相关属性:

spring.mail.host=smtp.example.com
spring.mail.port=587
spring.mail.username=sender@example.com
spring.mail.password=your-password
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

5. 测试运行
启动 Spring Boot 应用程序,定时任务会自动开始运行。每天早上 9 点,系统会自动发送一封提醒邮件。
扩展案例:动态调整定时任务
如果需要动态调整定时任务的执行时间,可以通过以下方式实现:
1. 创建配置类
创建一个配置类,用于存储定时任务的配置信息:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "task.schedule")
public class TaskScheduleConfig {private String cronExpression;public String getCronExpression() {return cronExpression;}public void setCronExpression(String cronExpression) {this.cronExpression = cronExpression;}
}

2. 修改定时任务类
在定时任务类中注入配置类,并使用 @Scheduled 注解的 cron 属性动态设置执行时间:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Component
public class DynamicTask {@Autowiredprivate TaskScheduleConfig taskScheduleConfig;// 动态设置定时任务的执行时间@Scheduled(cron = "#{taskScheduleConfig.cronExpression}")public void executeTask() {System.out.println("动态定时任务执行中...");// 任务逻辑}
}

3. 配置属性文件
在 application.properties 文件中添加定时任务的配置:

task.schedule.cronExpression=0 0/5 * * * ?

以上配置表示每 5 分钟执行一次任务。
注意事项
1.  任务线程池:默认情况下,Spring Boot 的定时任务使用单线程顺序执行。如果需要并发执行多个任务,可以配置任务线程池。
2.  任务监控:可以结合 Spring Boot Actuator 对定时任务进行监控和管理。
3.  任务异常处理:在任务中添加异常处理逻辑,避免任务因异常而停止执行。
4.  任务日志:记录任务的执行日志,方便后续的排查和分析。
通过以上案例,你可以快速实现 Spring Boot 中的定时任务功能,并根据实际需求进行扩展和优化。

http://www.xdnf.cn/news/51715.html

相关文章:

  • Linux 学习 6 文件相关命令包含查询
  • String +memset字符串类题型【C++】
  • 从零创建 Docker 镜像(基于 OCI 格式)
  • 【kubernetes】pod资源配额
  • 016-C语言内存函数
  • 每日一题算法——链表相交
  • git学习日志
  • Java EE(20)——线程安全——ThreadLocal
  • 第36讲:作物生长预测中的时间序列建模(LSTM等)
  • buildroot构建根文件系统报错(已解决大部分问题)
  • Linux学习——Linux进程间通信(IPC)聊天程序实践
  • Android开发中广播(Broadcast)技术详解
  • 线程基础题
  • FOC控制中的正弦PWM和空间矢量PWM对比与理解
  • 【计量地理学】实验五 试验变异函数计算
  • 软件设计师/系统架构师---计算机网络
  • Python爬虫实战:获取fenbi网最新备考资讯
  • 机器学习专栏(4):从数据饥荒到模型失控,破解AI训练的七大生死劫
  • SpringBoot Actuator健康检查:自定义HealthIndicator
  • Java 8 date/time type `java.time.LocalDateTime`
  • FreeRTOS中断管理
  • LangChain4j对话内存管理:ChatMemory原理与实战应用
  • 【深度学习与大模型基础】第12章-损失函数与梯度下降
  • 高等数学同步测试卷 同济7版 试卷部分 上 做题记录 上册期中同步测试卷 B卷
  • 相对路径和绝对路径解析
  • windows下配置Ninja
  • 算法笔记—动态规划
  • Multisim使用教程详尽版--(2025最新版)
  • B树的异常恢复
  • pivot_root:原理、用途及最简单 Demo