详解Springboot中的异步、定时、邮件任务

目录
  • 一、异步任务
    • 1、编写一个类AsyncService
    • 2、编写一个AsyncController类
    • 3、开启异步
  • 二、邮件任务
    • 1、引入依赖
    • 2、配置mail
    • 3、测试
  • 三、定时任务
    • 1、编写一个ScheduledService类
    • 2、添加注解

一、异步任务

1、编写一个类AsyncService

异步处理还是非常常用的,比如我们在网站上发送邮件,后台会去发送邮件,此时前台会造成响应不动,直到邮件发送完毕,响应才会成功,所以我们一般会采用多线程的方式去处理这些任务。

package com.rk.service;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@Service
public class AsyncService {
    public void hello(){
        try {
            System.out.println("数据处理中~");
            Thread.sleep(3000);//停止三秒
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

2、编写一个AsyncController类

package com.rk.controller;
import com.rk.service.AsyncService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class AsyncController {
    @Autowired
    AsyncService asyncService;
    @GetMapping("/hello")
    public String hello(){
        asyncService.hello();
        return "success";
    }
}

现在启动项目进行测试,三秒后才会出现success,现在还不是异步

3、开启异步

 @Async//告诉spring这是一个异步方法
    public void hello(){
        try {
            System.out.println("数据处理中~");
            Thread.sleep(3000);//停止三秒
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
@EnableAsync//开启异步注解功能
@SpringBootApplication
public class Springboot09TestApplication {
    public static void main(String[] args) {
        SpringApplication.run(Springboot09TestApplication.class, args);
    }
}

二、邮件任务

1、引入依赖

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

2、配置mail

#用户名
spring.mail.username=1624603357@qq.com
#密码
spring.mail.password=yblyxhvmnsurbbci
#发送邮件服务器
spring.mail.host=smtp.qq.com
#开启加密验证 ssl
spring.mail.properties.mail.smtp.ssl.enable=true

3、测试

简单邮件

     @Autowired
    JavaMailSenderImpl mailSender;

     @Test
    void contextLoads() {
        SimpleMailMessage mailMessage = new SimpleMailMessage();
        mailMessage.setSubject("你好,rk");//邮件标题
        mailMessage.setText("测试邮件");//邮件内柔
        mailMessage.setTo("r1624603357@126.com");//收件人邮箱
        mailMessage.setFrom("1624603357@qq.com");//发件人邮箱
        mailSender.send(mailMessage);

    }

复杂邮件

    @Test
    void contextLoads2() throws MessagingException {
        //一个复杂的邮件
        MimeMessage mimeMessage = mailSender.createMimeMessage();

        //组装
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

        //正文
        helper.setSubject("你好,rk");
        helper.setText("<h1 style='color:red'>测试邮件</h1>",true);

        //附件
        helper.addAttachment("1.png",new File("D:\\QLDownloadGame\\2\\1.png"));
        helper.addAttachment("rk.docx",new File("E:\\桌面\\rk.docx"));

        // 发/收件人
        helper.setTo("r1624603357@126.com");
        helper.setFrom("1624603357@qq.com");

        //发送
        mailSender.send(mimeMessage);

    }

三、定时任务

1、编写一个ScheduledService类

@Service
public class ScheduledService {
    //秒 分 时 日 月 周几
    //0 * * * * MON-FRI
    //注意cron表达式的用法;   每天20:28 0秒执行该方法
    @Scheduled(cron = "0 28 20 * * 0-7")
    public void hello(){
        System.out.println("现在是20:28");
        System.out.println("hello.....");
    }
}

项目启动后每天20:28:00执行hello方法

2、添加注解

@EnableAsync//开启异步注解功能
@EnableScheduling//开启定时功能注解
@SpringBootApplication
public class Springboot09TestApplication {
    public static void main(String[] args) {
        SpringApplication.run(Springboot09TestApplication.class, args);
    }
}

cron表达式练习

/*
【0 0/5 14,18 * * ?】每天14点整和18点整,每隔5分钟执行一次
【0 15 10 ? * 1-6】每个月的周一-周六10:15分执行一次
【0 0 2 ? * 6L】每个月的最后一个周六凌晨2点执行一次
【0 0 2 LW * ?】每个月的最后一个工作日凌晨2点执行一次
【0 0 2-4 ? * 1#1】每个月的第一个周一凌晨2点到4点期间,每个整点都执行一次
*/

到此这篇关于Springboot的异步、定时、邮件任务的文章就介绍到这了,更多相关Springboot异步定时邮件任务内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Springboot集成定时器和多线程异步处理操作

    需求:用@schedule标签进行定时处理逻辑,由于业务处理速度慢,需要每次执行逻辑放在不同的线程里异步执行 springboot集成多线程异步,直接上配置: /** * 线程池异步配置 */ @Configuration @EnableAsync public class ThreadExecutorConfig implements AsyncConfigurer { @Override public Executor getAsyncExecutor() { ThreadPoolTaskE

  • SpringBoot实现定时任务和异步调用

    本文实例为大家分享了SpringBoot实现定时任务和异步调用的具体代码,供大家参考,具体内容如下 环境: jdk1.8:spring boot2.0.2:Maven3.3 摘要说明: 定时任务:定时任务是业务场景中经常出现的一种情况如:定时发送邮件,短信.定时统计监控数据.定时对账等 异步调用:一个都买流程可能包括下单.发货通知.短信推送.消息推送等,其实除了下单这个主要程序是主程序,其他子程序可以同时进行且不影响主程序的运行,这个时候就可以使用异步调用来调用这些子程序: 步骤: 1.定时任务

  • SpringBoot任务之详解邮件任务

    01: 异步任务 02: 定时任务 一.SpringBoot--任务:邮件任务 1.1 添加依赖(增加邮件支持) pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> 1.2 获取第三方授权码 1.2.1 登录QQ邮箱 1.2.2 点

  • springboot中swagger、异步/定时/邮件任务的问题

    目录 1.SpringBoot:集成Swagger终极版 1.1.Swagger简介 1.2.SpringBoot集成Swagger 1.3.配置Swagger 1.4.配置扫描接口 1.5.配置Swagger开关 1.6.配置API分组 1.7.实体配置 1.8.常用注解 1.9.拓展:其他皮肤 2.SpringBoot:异步.定时.邮件任务 2.1.异步任务 2.2.邮件任务 2.3.定时任务 1.SpringBoot:集成Swagger终极版 学习目标: 了解Swagger的概念及作用 掌

  • Springboot实现Java邮件任务过程解析

    1.maven引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> 2.application.properties配置发送邮箱 //用户邮箱 spring.mail.username=753029781@qq.com //QQ邮箱开通第三

  • SpringBoot实现发送邮件任务

    本文实例为大家分享了SpringBoot实现发送邮件任务的具体代码,供大家参考,具体内容如下 1.pom中引入spring-boot-starter-mail <dependencies> <!--邮件--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> &

  • 详解Springboot中的异步、定时、邮件任务

    目录 一.异步任务 1.编写一个类AsyncService 2.编写一个AsyncController类 3.开启异步 二.邮件任务 1.引入依赖 2.配置mail 3.测试 三.定时任务 1.编写一个ScheduledService类 2.添加注解 一.异步任务 1.编写一个类AsyncService 异步处理还是非常常用的,比如我们在网站上发送邮件,后台会去发送邮件,此时前台会造成响应不动,直到邮件发送完毕,响应才会成功,所以我们一般会采用多线程的方式去处理这些任务. package com

  • 详解SpringBoot通用配置文件(不定时更新)

      以下是SpringBoot项目中的常用配置类.jar包坐标等通用配置 pom文件 <!-- --> <!-- 自定义配置文件提示 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true<

  • 详解SpringBoot中添加@ResponseBody注解会发生什么

    SpringBoot版本2.2.4.RELEASE. [1]SpringBoot接收到请求 ① springboot接收到一个请求返回json格式的列表,方法参数为JSONObject 格式,使用了注解@RequestBody 为什么这里要说明返回格式.方法参数.参数注解?因为方法参数与参数注解会影响你使用不同的参数解析器与后置处理器!通常使用WebDataBinder进行参数数据绑定结果也不同. 将要调用的目标方法如下: @ApiOperation(value="分页查询") @Re

  • 详解Java中CountDownLatch异步转同步工具类

    使用场景 由于公司业务需求,需要对接socket.MQTT等消息队列. 众所周知 socket 是双向通信,socket的回复是人为定义的,客户端推送消息给服务端,服务端的回复是两条线.无法像http请求有回复. 下发指令给硬件时,需要校验此次数据下发是否成功. 用户体验而言,点击按钮就要知道此次的下发成功或失败. 如上图模型, 第一种方案使用Tread.sleep 优点:占用资源小,放弃当前cpu资源 缺点: 回复速度快,休眠时间过长,仍然需要等待休眠结束才能返回,响应速度是固定的,无法及时响

  • 详解SpringBoot中如何使用布隆过滤器

    目录 前言 一.Guava 实现布隆过滤器 二.Hutool 布隆过滤器 三.Redission 布隆过滤器 四.小结 五.Guava 布隆过滤器结合 Redis 使用 昨天写了一篇Redis布隆过滤器相关的命令的文章,今天来说一说springboot中如何简单在代码中使用布隆过滤器吧. 目前市面上也有好几种实现方式,如果你需要高度定制化,可以完全从零实现,当然这不是一个简单的工程. 如果只是想快速开始的话,那么市面上现成的实现,无疑是最快的. 前言 今天说到的实现方式有以下几种: 引入 Gua

  • 详解SpringBoot中的参数校验(项目实战)

    Java后端发工作中经常会对前端传递过来的参数做一些校验,在业务中还要抛出异常或者不断的返回异常时的校验信息,充满了if-else这种校验代码,在代码中相当冗长.例如说,用户注册时,会校验手机格式的正确性,用户名的长度等等.虽说前端也可以做参数校验,但是为了保证我们API接口的可靠性,以保证最终数据入库的正确性,后端进行参数校验不可忽视. Hibernate Validator 提供了一种统一方便的方式,让我们快速的实现参数校验. Hibernate Validator 使用注解,实现声明式校验

  • 详解SpringBoot中Controller接收对象列表实现

    如果Spring Boot中对应的Controller要接收一个对象,该对象中又存放了一个List列表,那么页面该如何传递相关应的参数信息呢. 本篇文章给大家一个简单的示例,提供一种实现方式. 实体类 首先看实体类的结构(注意使用了Lombok): @Data public class Rules { private List<Rule> rules; } 对应Rule实体类代码如下: @Data public class Rule { /** * 类名 */ private String c

  • 详解SpringBoot中的tomcat优化和修改

    项目背景 在做项目的时候,把SpringBoot的项目打包成安装包了,在客户上面安装运行,一切都是那么的完美,可是发生了意外,对方突然说导出导入的文件都不行了.我急急忙忙的查看日志,发现报了一个错误 java.io.IOException: The temporary upload location [C:\Windows\Temp\tomcat.1351070438015228346.8884\work\Tomcat\localhost\ROOT] is not valid at org.ap

  • 详解SpringBoot中关于%2e的Trick

    分享一个SpringBoot中关于%2e的小Trick.先说结论,当SpringBoot版本在小于等于2.3.0.RELEASE的情况下, alwaysUseFullPath 为默认值false,这会使得其获取ServletPath,所以在路由匹配时会对 %2e 进行解码,这可能导致身份验证绕过.而反过来由于高版本将 alwaysUseFullPath 自动配置成了true从而开启全路径,又可能导致一些安全问题. 这里我们来通过一个例子看一下这个Trick,并分析它的原因. 首先我们先来设置Sp

  • 详解springboot中各个版本的redis配置问题

    今天在springboot中使用数据库,springboot版本为2.0.2.RELEASE,通过pom引入jar包,配置文件application.properties中的redis配置文件报错,提示例如deprecated configuration property 'spring.redis.pool.max-active',猜想应该是版本不对,发现springboot在1.4前后集成redis发生了一些变化.下面截图看下. 一.不同版本RedisProperties的区别 这是spri

随机推荐