Spring Schedule:Spring boot整合Spring Schedule实战讲解定时发送邮件的功能

这篇具有很好参考价值的文章主要介绍了Spring Schedule:Spring boot整合Spring Schedule实战讲解定时发送邮件的功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spring Schedule:Spring boot整合Spring Schedule实战讲解定时发送邮件的功能,《Spring 狂野之旅:底层原理高级进阶》 🚀,spring boot,自动化,Java

🎉🎉欢迎光临,终于等到你啦🎉🎉

🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀

🌟持续更新的专栏《Spring 狂野之旅:从入门到入魔》 🚀

本专栏带你从Spring入门到入魔 

这是苏泽的个人主页可以看到我其他的内容哦👇👇

努力的苏泽http://suzee.blog.csdn.net/


简介

本篇详细讲解定时任务如何构建  文末有详细的实战案例 定时发送邮件 

目录

简介

介绍

定时任务调度技术是一种用于在预定时间或间隔时间执行任务的技术。

Spring中的定时任务调度模块简介

​编辑

Spring Schedule的基本用法

Cron表达式详解

​编辑

定时任务的参数和返回值处理

处理定时任务方法的返回值:

定时任务的错误处理与异常处理:

处理定时任务方法中的异常:

定时任务的错误处理策略:

配置多个定时任务:

并发执行多个定时任务:

控制定时任务的执行顺序:

实战案例:定时发送邮箱

去QQ邮箱

开启这个服务

介绍

定时任务调度技术是一种用于在预定时间或间隔时间执行任务的技术。

它允许开发人员根据特定的时间表安排任务的执行,可以是一次性任务或周期性任务。定时任务调度技术通常用于需要定期执行的任务,例如数据备份、定时报告生成、定时数据同步等。

Spring中的定时任务调度模块简介


定时任务调度技术提供了一种方便和可靠的方式来执行重复性或定期性的任务。它可以帮助开发人员自动化一些常规的任务,减少人工干预和减轻人力负担。

Spring Schedule:Spring boot整合Spring Schedule实战讲解定时发送邮件的功能,《Spring 狂野之旅:底层原理高级进阶》 🚀,spring boot,自动化,Java

Spring Schedule的基本用法

需要在项目的 Maven 依赖中添加 Spring Schedule 的相关依赖项。可以在项目的 pom.xml 文件中添加以下依赖项:

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

然后,您需要在 Spring 配置文件中启用定时任务调度功能。可以通过在配置类上添加注解 @EnableScheduling 来启用定时任务调度。

  1. 创建定时任务方法:

在您的 Spring Bean 中创建一个方法,该方法将作为定时任务的执行体。可以通过在方法上添加注解 @Scheduled 来标识该方法是一个定时任务。

@Component
public class MyTask {
    @Scheduled(fixedDelay = 5000) // 每隔5秒执行一次
    public void doTask() {
        // 执行任务的逻辑
    }
}
  1. 配置定时任务执行时间表达式:

可以使用 @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.");
    }
}
  1. 运行定时任务:

当 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表达式详解

Spring Schedule:Spring boot整合Spring Schedule实战讲解定时发送邮件的功能,《Spring 狂野之旅:底层原理高级进阶》 🚀,spring boot,自动化,Java

 

  1. 定时任务的参数和返回值处理

定时任务方法可以接受参数,并且可以有返回值。下面是对定时任务参数和返回值的处理方式的讲解:

  1. 传递参数给定时任务方法:

定时任务方法可以接受参数,您可以在方法的参数列表中声明所需的参数。例如,如果您希望定时任务方法接受一个字符串参数,可以按如下方式定义方法:

@Scheduled(fixedDelay = 5000)
public void myTask(String parameter) {
    // 使用接收到的参数执行任务逻辑
}

当定时任务被触发时,Spring Schedule 将自动将参数传递给定时任务方法。您可以根据需要在方法内部使用这些参数。

  1. 处理定时任务方法的返回值:

定时任务方法可以有返回值,但是返回值通常被忽略,因为定时任务的执行是异步的,没有实际的调用方来处理返回值。因此,通常情况下,定时任务方法的返回值应该为 void

定时任务的错误处理与异常处理:

在定时任务的执行过程中,可能会出现错误或异常。下面是对定时任务错误处理和异常处理的讲解:

  1. 处理定时任务方法中的异常:

如果定时任务方法中抛出了异常,Spring Schedule 将捕获这些异常并记录日志。默认情况下,异常不会向上层传播,也不会打断定时任务的执行。因此,您可以在定时任务方法中处理异常,例如进行异常日志记录或错误处理。

@Scheduled(fixedDelay = 5000)
public void myTask() {
    try {
        // 执行任务逻辑
    } catch (Exception e) {
        // 处理异常,例如记录日志或进行错误处理
    }
}
  1. 定时任务的错误处理策略:

如果您希望在定时任务方法抛出异常时中断任务的执行,并采取特定的错误处理策略,可以通过配置 @EnableScheduling 注解的 exceptionHandler 属性来实现。

@Configuration
@EnableScheduling(exceptionHandler = "myExceptionHandler")
public class MySchedulingConfig {
    
    @Bean
    public 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 {
    
    @Bean
    public TaskScheduler taskScheduler() {
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        scheduler.setPoolSize(10); // 设置线程池大小为10
        return 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的逻辑
        }
    }
}

实战案例:定时发送邮箱

首先引入依赖

dependency>
    groupId>org.springframework.bootgroupId>
    artifactId>spring-boot-starter-mailartifactId>
dependency>

去QQ邮箱

Spring Schedule:Spring boot整合Spring Schedule实战讲解定时发送邮件的功能,《Spring 狂野之旅:底层原理高级进阶》 🚀,spring boot,自动化,Java

开启这个服务

Spring Schedule:Spring boot整合Spring Schedule实战讲解定时发送邮件的功能,《Spring 狂野之旅:底层原理高级进阶》 🚀,spring boot,自动化,Java

自己收一下验证码 确认 就OK了

配置你的的基本配置

Spring Schedule:Spring boot整合Spring Schedule实战讲解定时发送邮件的功能,《Spring 狂野之旅:底层原理高级进阶》 🚀,spring boot,自动化,Java

编写邮箱发送方法

@Component
@ConfigurationProperties(prefix = "email.config")
public class EmailUtil {
    @Resource
    private StringRedisTemplate stringRedisTemplate;

    /**
     * 验证码长度
     */
    private int codeLen=6;

    /**
     * 发送邮箱验证码的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 authCode=RandomUtil.randomNumbers(6);
        stringRedisTemplate.opsForValue().set(LOGIN_CODE_KEY+email,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 ;
    }

最终效果 

Spring Schedule:Spring boot整合Spring Schedule实战讲解定时发送邮件的功能,《Spring 狂野之旅:底层原理高级进阶》 🚀,spring boot,自动化,Java文章来源地址https://www.toymoban.com/news/detail-839913.html

到了这里,关于Spring Schedule:Spring boot整合Spring Schedule实战讲解定时发送邮件的功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot 如何实现邮件发送

    在现代的Web应用程序中,邮件通知已经成为了一项非常重要的功能。例如,在用户注册、密码重置、订单确认等方面,我们通常都会使用邮件来通知用户。在Spring Boot应用程序中,我们可以使用JavaMailSender来实现邮件发送。 在本文中,我们将介绍如何在Spring Boot应用程序中实现

    2024年02月16日
    浏览(44)
  • Spring Boot 整合邮件服务

    首先参考了 Spring Boot整合邮件配置,这篇文章写的很好,按照上面的操作一步步走下去就行了。 版本配置 然后因为反复配置版本很麻烦,所以参考了 如何统一引入 Spring Boot 版本?。 FreeMarker 在配置 FreeMarker 时,发现找不到 FreeMarkerConfigurer 类,参考了 springboot整合Freemark模板

    2024年02月02日
    浏览(50)
  • Spring Boot邮件发送教程:步步为营,轻松实现图片附件邮件!

      通过Spring Boot构建一个功能强大的邮件发送应用程序,重点是实现发送包含图片附件的邮件。我将逐步介绍添加必要的依赖、创建邮件服务类和控制器的步骤,并提供了具体的示例源代码。跟随这个简单而清晰的教程,您将能够轻松地集成邮件发送功能到您的Spring Boot应用中

    2024年02月04日
    浏览(52)
  • springboot 发送邮件,以及邮件工具类 并且解决spring-boot-starter-mail 发送邮件附件乱码或者文件错乱

    1、设置系统值 System.setProperty(“mail.mime.splitlongparameters”, “false”); 2、 在创建对象的时候定义编码格式(utf-8): MimeMessageHelper helper = new MimeMessageHelper(mes, true, “utf-8”); 3、 其次,在添加附件的时候,附件名是需要定义编码的 helper.addAttachment(MimeUtility.encodeWord(附件名,“utf-8”

    2024年02月15日
    浏览(68)
  • Spring Boot中发送邮件时,如何让发件人显示别名

    之前,我们通过一系列文章,介绍了如何在Spring Boot中发送邮件: 发送邮件 添加附件 引用静态资源 邮件模版 已经包含了大部分的应用场景。但最近DD在做YouTube中文配音的时候,碰到一个问题: 如上图所示,收件人在客户端收到的时候,显示的名称是邮箱的前缀,而不是我

    2024年02月08日
    浏览(50)
  • MQTT协议-EMQX技术文档-spring-boot整合使用--发送接收-消费

    MQTT(Message Queuing Telemetry Transport)是一种基于发布/订阅模式的通信协议,它与MQ(Message Queue,消息队列)有一定的关联,但二者并不完全相同。 MQTT是一种轻量级的通信协议,专门为在物联网(IoT)设备之间的消息传递而设计。它运行在TCP协议之上,以“发布-订阅”模式进行

    2024年02月12日
    浏览(37)
  • 【论坛java项目】第二章 Spring Boot实践,开发社区登录模块:发送邮件、开发注册功能、会话管理、生成验证码、开发登录、退出功能、

    😀如果对你有帮助的话😊 🌺为博主点个赞吧 👍 👍点赞是对博主最大的鼓励😋 💓爱心发射~💓 bofryuzursekbiab——密码 访问邮箱域名 邮箱端口 账号 密码 协议 详细配置 JavaMailSender 是 Spring Email 的核心组件,负责发送邮件 MimeMessage 用于封装邮件的相关信息 MimeMessageHelper 用

    2024年02月06日
    浏览(57)
  • Spring Boot 整合 MongoDB 实战

    MongoDB是一种NoSQL数据库,而Spring Boot是一个用于快速构建Java应用程序的开发框架。本文将介绍如何使用Spring Boot整合MongoDB,实现数据的持久化和操作。通过本文的学习,读者将了解到Spring Boot和MongoDB的基本概念和用途,并理解为什么选择使用它们进行整合。 在开始整合之前,

    2024年02月14日
    浏览(43)
  • Spring Boot进阶(96):轻松上手:实战Spring Boot整合Docker

      Docker 是一个开源的应用程序容器化工具,它可以将应用程序和依赖组件打包到一个容器中,实现应用程序的快速部署和运行。Spring Boot 是一个快速开发应用程序的框架,使用 Spring Boot 可以快速构建各种各样的应用程序。本文将介绍如何使用 Spring Boot 整合 Docker,实现应用

    2024年02月07日
    浏览(55)
  • Spring Boot进阶(98):【实战经验】Spring Boot如何轻松整合Jenkins?

      Jenkins是一款流行的开源持续集成工具,通过Jenkins可以对项目进行持续集成、自动化部署等操作,提高开发效率和代码质量。Spring Boot作为一款轻量级的开发框架,具有快速构建应用、简化配置等众多优点,与Jenkins的结合可以进一步提高开发效率和项目质量。   那么,

    2024年02月06日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包