django网站开发源代码,室内设计公司网站设计,网红店的营销方式,助孕网站优化推广#x1f389;#x1f389;欢迎光临#xff0c;终于等到你啦#x1f389;#x1f389;
#x1f3c5;我是苏泽#xff0c;一位对技术充满热情的探索者和分享者。#x1f680;#x1f680;
#x1f31f;持续更新的专栏《Spring 狂野之旅#xff1a;从入门到入魔》 欢迎光临终于等到你啦
我是苏泽一位对技术充满热情的探索者和分享者。
持续更新的专栏《Spring 狂野之旅从入门到入魔》
本专栏带你从Spring入门到入魔
这是苏泽的个人主页可以看到我其他的内容哦
努力的苏泽http://suzee.blog.csdn.net/ 简介
本篇详细讲解定时任务如何构建 文末有详细的实战案例 定时发送邮件
目录
简介
介绍
定时任务调度技术是一种用于在预定时间或间隔时间执行任务的技术。
Spring中的定时任务调度模块简介 编辑
Spring Schedule的基本用法
Cron表达式详解 编辑
定时任务的参数和返回值处理
处理定时任务方法的返回值
定时任务的错误处理与异常处理
处理定时任务方法中的异常
定时任务的错误处理策略
配置多个定时任务
并发执行多个定时任务
控制定时任务的执行顺序
实战案例定时发送邮箱
去QQ邮箱
开启这个服务 介绍
定时任务调度技术是一种用于在预定时间或间隔时间执行任务的技术。
它允许开发人员根据特定的时间表安排任务的执行可以是一次性任务或周期性任务。定时任务调度技术通常用于需要定期执行的任务例如数据备份、定时报告生成、定时数据同步等。
Spring中的定时任务调度模块简介 定时任务调度技术提供了一种方便和可靠的方式来执行重复性或定期性的任务。它可以帮助开发人员自动化一些常规的任务减少人工干预和减轻人力负担。 Spring Schedule的基本用法
需要在项目的 Maven 依赖中添加 Spring Schedule 的相关依赖项。可以在项目的 pom.xml 文件中添加以下依赖项
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId
/dependency
然后您需要在 Spring 配置文件中启用定时任务调度功能。可以通过在配置类上添加注解 EnableScheduling 来启用定时任务调度。
创建定时任务方法
在您的 Spring Bean 中创建一个方法该方法将作为定时任务的执行体。可以通过在方法上添加注解 Scheduled 来标识该方法是一个定时任务。
Component
public class MyTask {Scheduled(fixedDelay 5000) // 每隔5秒执行一次public void doTask() {// 执行任务的逻辑}
}
配置定时任务执行时间表达式
可以使用 Scheduled 注解的属性来配置定时任务的执行时间表达式。例如可以使用 fixedDelay 属性来指定任务的执行间隔时间或者使用 cron 属性来指定任务的执行时间规则。
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;Component
EnableScheduling
public class MyTask {// 固定延迟执行每隔5秒执行一次Scheduled(fixedDelay 5000)public void fixedDelayTask() {System.out.println(Fixed delay task executed.);}// 固定频率执行每隔3秒执行一次Scheduled(fixedRate 3000)public void fixedRateTask() {System.out.println(Fixed rate task executed.);}// Cron 表达式执行每分钟的第30秒执行一次Scheduled(cron 30 * * * * *)public void cronTask() {System.out.println(Cron task executed.);}
}
运行定时任务
当 Spring 应用启动时定时任务将自动开始执行。您可以查看日志或其他输出来确认定时任务的执行情况。
定时任务的执行方式
在 Spring Schedule 中有几种常见的定时任务执行方式
固定延迟执行fixedDelay在当前任务完成后等待一定的延迟时间后再次执行任务。固定频率执行fixedRate以固定的频率执行任务不考虑任务的执行时间。Cron 表达式执行使用标准的 Cron 表达式配置任务的执行时间规则可以实现更灵活的定时任务调度。 fixedDelayTask() 方法使用 Scheduled(fixedDelay 5000) 注解配置了任务的执行间隔为每隔5秒执行一次。当任务执行完成后会等待5秒再次执行。 fixedRateTask() 方法使用 Scheduled(fixedRate 3000) 注解配置了任务的执行频率为每隔3秒执行一次。不考虑任务的执行时间即使上一次任务还未完成也会按照固定频率执行。 cronTask() 方法使用 Scheduled(cron 30 * * * * *) 注解配置了任务的执行时间规则为每分钟的第30秒执行一次。使用标准的 Cron 表达式可以实现更灵活的定时任务调度。 Cron表达式详解 定时任务的参数和返回值处理
定时任务方法可以接受参数并且可以有返回值。下面是对定时任务参数和返回值的处理方式的讲解
传递参数给定时任务方法
定时任务方法可以接受参数您可以在方法的参数列表中声明所需的参数。例如如果您希望定时任务方法接受一个字符串参数可以按如下方式定义方法
Scheduled(fixedDelay 5000)
public void myTask(String parameter) {// 使用接收到的参数执行任务逻辑
}
当定时任务被触发时Spring Schedule 将自动将参数传递给定时任务方法。您可以根据需要在方法内部使用这些参数。 处理定时任务方法的返回值
定时任务方法可以有返回值但是返回值通常被忽略因为定时任务的执行是异步的没有实际的调用方来处理返回值。因此通常情况下定时任务方法的返回值应该为 void。
定时任务的错误处理与异常处理
在定时任务的执行过程中可能会出现错误或异常。下面是对定时任务错误处理和异常处理的讲解 处理定时任务方法中的异常
如果定时任务方法中抛出了异常Spring Schedule 将捕获这些异常并记录日志。默认情况下异常不会向上层传播也不会打断定时任务的执行。因此您可以在定时任务方法中处理异常例如进行异常日志记录或错误处理。
Scheduled(fixedDelay 5000)
public void myTask() {try {// 执行任务逻辑} catch (Exception e) {// 处理异常例如记录日志或进行错误处理}
} 定时任务的错误处理策略
如果您希望在定时任务方法抛出异常时中断任务的执行并采取特定的错误处理策略可以通过配置 EnableScheduling 注解的 exceptionHandler 属性来实现。
Configuration
EnableScheduling(exceptionHandler myExceptionHandler)
public class MySchedulingConfig {Beanpublic TaskScheduler taskScheduler() {ThreadPoolTaskScheduler scheduler new ThreadPoolTaskScheduler();scheduler.setPoolSize(10);return scheduler;}public void myExceptionHandler(Throwable error) {// 错误处理逻辑例如记录日志或发送通知}
}
在上述示例中我们创建了一个名为 MySchedulingConfig 的配置类并在其中配置了一个 TaskScheduler bean。通过在 EnableScheduling 注解上指定 exceptionHandler 属性将错误处理逻辑与定时任务调度器关联起来。
配置多个定时任务
如果您需要配置多个定时任务可以在同一个类中定义多个定时任务方法或者创建多个带有定时任务注解的 Spring Bean。
Component
public class MyTasks {Scheduled(fixedDelay 5000)public void task1() {// 执行任务1的逻辑}Scheduled(cron 0 0 12 * * ?)public void task2() {// 执行任务2的逻辑}
}
并发执行多个定时任务
默认情况下Spring Schedule 使用单个线程执行所有的定时任务。如果您需要并发执行多个定时任务可以配置一个具有适当线程池大小的任务调度器。
Configuration
EnableScheduling
public class MySchedulingConfig {Beanpublic TaskScheduler taskScheduler() {ThreadPoolTaskScheduler scheduler new ThreadPoolTaskScheduler();scheduler.setPoolSize(10); // 设置线程池大小为10return scheduler;}
}
控制定时任务的执行顺序
Spring Schedule 默认情况下不提供显式的控制定时任务执行顺序的方式。定时任务的执行顺序取决于任务调度器的实现和底层线程池的行为。
如果您需要在定时任务之间确保特定的执行顺序可以考虑使用互斥或其他同步机制来实现。例如您可以使用 synchronized 关键字或 Lock 接口来控制任务的互斥执行。
Component
public class MyTasks {private final Object lock1 new Object();private final Object lock2 new Object();Scheduled(fixedDelay 5000)public void task1() {synchronized (lock1) {// 执行任务1的逻辑}}Scheduled(fixedDelay 5000)public void task2() {synchronized (lock2) {// 执行任务2的逻辑}}
}
实战案例定时发送邮箱
首先引入依赖
dependencygroupIdorg.springframework.bootgroupIdartifactIdspring-boot-starter-mailartifactId
dependency
去QQ邮箱 开启这个服务 自己收一下验证码 确认 就OK了
配置你的的基本配置 编写邮箱发送方法
Component
ConfigurationProperties(prefix email.config)
public class EmailUtil {Resourceprivate StringRedisTemplate stringRedisTemplate;/*** 验证码长度*/private int codeLen6;/*** 发送邮箱验证码的qq号*/private String qq;/*** 发送邮件的邮箱*/private String toSendEmail;/*** 发件人*/private String sender;/*** 开启IMAP/SMTP服务获取的授权码*/private String authPwd;/*** 邮件的主题*/private String title;/*** 邮件的内容*/private String content;Scheduled(cron 0 34 21 * * ?)public void SendEmail(String email){String authCodeRandomUtil.randomNumbers(6);stringRedisTemplate.opsForValue().set(LOGIN_CODE_KEYemail,authCode,10, TimeUnit.MINUTES); //将验证码存入缓存,10分钟失效try {sendAuthCodeEmail(email,authCode);} catch (Exception e) {e.printStackTrace();return Result.fail(发送失败);}return Result.ok();}/*** 发送邮箱验证码* param email* param authCode*/public String sendAuthCodeEmail(String email, String authCode) {try {SimpleEmail mail new SimpleEmail();mail.setHostName(smtp.qq.com);//发送邮件的服务器mail.setAuthentication(qq, authPwd);//第一个参数是发送邮箱验证码的qq号第二个参数是开启IMAP/SMTP服务获取的授权码mail.setFrom(toSendEmail, sender); //第一个参数是发送邮件的邮箱第二个参数是发件人mail.setSSLOnConnect(true); //使用安全链接mail.addTo(email);//接收的邮箱mail.setSubject(title);//设置邮件的主题mail.setMsg(content authCode);//设置邮件的内容mail.send();//发送} catch (EmailException e) {e.printStackTrace();}return ;}
最终效果 文章转载自: http://www.morning.ckhry.cn.gov.cn.ckhry.cn http://www.morning.hhskr.cn.gov.cn.hhskr.cn http://www.morning.hgtr.cn.gov.cn.hgtr.cn http://www.morning.rqqn.cn.gov.cn.rqqn.cn http://www.morning.cmzcp.cn.gov.cn.cmzcp.cn http://www.morning.hflrz.cn.gov.cn.hflrz.cn http://www.morning.hlzpb.cn.gov.cn.hlzpb.cn http://www.morning.rfrx.cn.gov.cn.rfrx.cn http://www.morning.kryxk.cn.gov.cn.kryxk.cn http://www.morning.bpxmw.cn.gov.cn.bpxmw.cn http://www.morning.rhmpk.cn.gov.cn.rhmpk.cn http://www.morning.bwqr.cn.gov.cn.bwqr.cn http://www.morning.qtxwb.cn.gov.cn.qtxwb.cn http://www.morning.sbjhm.cn.gov.cn.sbjhm.cn http://www.morning.brwei.com.gov.cn.brwei.com http://www.morning.snxbf.cn.gov.cn.snxbf.cn http://www.morning.nhbhc.cn.gov.cn.nhbhc.cn http://www.morning.bfnbn.cn.gov.cn.bfnbn.cn http://www.morning.fmswb.cn.gov.cn.fmswb.cn http://www.morning.xmwdt.cn.gov.cn.xmwdt.cn http://www.morning.wfbnp.cn.gov.cn.wfbnp.cn http://www.morning.mnbcj.cn.gov.cn.mnbcj.cn http://www.morning.yydzk.cn.gov.cn.yydzk.cn http://www.morning.pgrsf.cn.gov.cn.pgrsf.cn http://www.morning.grpbt.cn.gov.cn.grpbt.cn http://www.morning.zlxrg.cn.gov.cn.zlxrg.cn http://www.morning.lnnc.cn.gov.cn.lnnc.cn http://www.morning.nggry.cn.gov.cn.nggry.cn http://www.morning.rtspr.cn.gov.cn.rtspr.cn http://www.morning.lcbnb.cn.gov.cn.lcbnb.cn http://www.morning.jgmdr.cn.gov.cn.jgmdr.cn http://www.morning.vnuwdy.cn.gov.cn.vnuwdy.cn http://www.morning.ygth.cn.gov.cn.ygth.cn http://www.morning.pxmyw.cn.gov.cn.pxmyw.cn http://www.morning.nyqb.cn.gov.cn.nyqb.cn http://www.morning.srkzd.cn.gov.cn.srkzd.cn http://www.morning.mcndn.cn.gov.cn.mcndn.cn http://www.morning.rjyd.cn.gov.cn.rjyd.cn http://www.morning.tsnmt.cn.gov.cn.tsnmt.cn http://www.morning.xdmsq.cn.gov.cn.xdmsq.cn http://www.morning.bpmdx.cn.gov.cn.bpmdx.cn http://www.morning.sjftk.cn.gov.cn.sjftk.cn http://www.morning.nnjq.cn.gov.cn.nnjq.cn http://www.morning.qnzld.cn.gov.cn.qnzld.cn http://www.morning.wqhlj.cn.gov.cn.wqhlj.cn http://www.morning.lhrwy.cn.gov.cn.lhrwy.cn http://www.morning.ngcw.cn.gov.cn.ngcw.cn http://www.morning.mlmwl.cn.gov.cn.mlmwl.cn http://www.morning.ptdzm.cn.gov.cn.ptdzm.cn http://www.morning.hcqd.cn.gov.cn.hcqd.cn http://www.morning.ztqj.cn.gov.cn.ztqj.cn http://www.morning.wpydf.cn.gov.cn.wpydf.cn http://www.morning.rglzy.cn.gov.cn.rglzy.cn http://www.morning.kgrwh.cn.gov.cn.kgrwh.cn http://www.morning.qkgwx.cn.gov.cn.qkgwx.cn http://www.morning.dzgmj.cn.gov.cn.dzgmj.cn http://www.morning.rpljf.cn.gov.cn.rpljf.cn http://www.morning.jtrqn.cn.gov.cn.jtrqn.cn http://www.morning.ypbdr.cn.gov.cn.ypbdr.cn http://www.morning.dlwzm.cn.gov.cn.dlwzm.cn http://www.morning.nqmhf.cn.gov.cn.nqmhf.cn http://www.morning.tfrlj.cn.gov.cn.tfrlj.cn http://www.morning.bpmft.cn.gov.cn.bpmft.cn http://www.morning.qlsyf.cn.gov.cn.qlsyf.cn http://www.morning.trrrm.cn.gov.cn.trrrm.cn http://www.morning.sqhtg.cn.gov.cn.sqhtg.cn http://www.morning.swzpx.cn.gov.cn.swzpx.cn http://www.morning.kmcby.cn.gov.cn.kmcby.cn http://www.morning.rnpnn.cn.gov.cn.rnpnn.cn http://www.morning.zqzzn.cn.gov.cn.zqzzn.cn http://www.morning.zdtfr.cn.gov.cn.zdtfr.cn http://www.morning.trsdm.cn.gov.cn.trsdm.cn http://www.morning.dwncg.cn.gov.cn.dwncg.cn http://www.morning.linzhigongmao.cn.gov.cn.linzhigongmao.cn http://www.morning.dygqq.cn.gov.cn.dygqq.cn http://www.morning.rjjys.cn.gov.cn.rjjys.cn http://www.morning.gwkjg.cn.gov.cn.gwkjg.cn http://www.morning.mmclj.cn.gov.cn.mmclj.cn http://www.morning.qfplp.cn.gov.cn.qfplp.cn http://www.morning.ckwrn.cn.gov.cn.ckwrn.cn