36、springboot——异步任务、定时任务、邮件任务

一、异步任务

测试如下

1、不是异步方法的时候:

进行等待三秒再进行应答

@Service
public class AsynService {

    public void hello(){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("处理数据.....");
    }
}

controller类:

@RestController
public class AsyncController {
    @Autowired
    AsyncService asyncService;

    @GetMapping("/hello")
    public String hello(){
        asyncService.hello();
        return "success";
    }
}

访问链接服务器3秒之后才给出响应;

2、是异步方法的时候

@Service
public class AsynService {

    //告诉spring这是一个异步的方法
    @Async
    public void hello(){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("处理数据.....");
    }
}

要想@Async注解起效果还需开启允许异步注解

@EnableAsync        //开启异步注解
@SpringBootApplication
public class Springboot04TaskApplication {

    public static void main(String[] args) {
        SpringApplication.run(Springboot04TaskApplication.class, args);
    }

}

二、定时任务

项目开发中经常需要执行一些定时任务

比如凌晨时候,分析一个前一天的日志信息

Spring为我们提供了异步执行任务调度的方式

提供了TaskExecutor、TaskScheduler接口

cron属性:

*代表全部

定时任务方法(这里的例子是星期一到星期六的每天的每小时的每分钟打印一次定时任务开启)

@Service
public class ScheduleService {

    //定时任务
    //cron:second、minute、hour、day of month、day of week
    @Scheduled(cron = "0 * * * * MON-SAT")
    public void hello(){
        System.out.println("定时任务开启...");
    }
}

开启允许定时任务的注解

@EnableScheduling   //开启基于注解的定时任务
@SpringBootApplication
public class Springboot04TaskApplication {

    public static void main(String[] args) {
        SpringApplication.run(Springboot04TaskApplication.class, args);
    }

}

启动服务之后没隔一分钟就打印一次

在任意分钟的0-4s进行打印

    @Scheduled(cron = "0-4 * * * * 0-7")
    public void hello(){
        System.out.println("定时任务开启...");
    }

三、邮件任务

1、引入邮件的依赖

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

查看springboot的mail的相关自动配置

注入的邮件操作类

    @Bean
    JavaMailSenderImpl mailSender(Session session) {
        JavaMailSenderImpl sender = new JavaMailSenderImpl();
        sender.setDefaultEncoding(this.properties.getDefaultEncoding().name());
        sender.setSession(session);
        return sender;
    }

相关的配置属性

@ConfigurationProperties(
    prefix = "spring.mail"
)
public class MailProperties {
    private static final Charset DEFAULT_CHARSET;
    private String host;
    private Integer port;
    private String username;
    private String password;
    private String protocol = "smtp";
    private Charset defaultEncoding;
    private Map<String, String> properties;
    private String jndiName;

 我们是通过中间服务器来发送邮箱的

2、测试发送简单邮件

2.1.配置文件中进行文件配置

spring.mail.username=xxxxxxxxx@qq.com
//注意是授权密码,非登录密码
spring.mail.password=rmdwtmbkrwpibddd
spring.mail.host=smtp.qq.com
//配置ssl安全连接
spring.mail.properties.mail.smtp.ssl.enable=true

授权密码的获取:

进入qq邮箱,点击设置

点击账户

先开启smtp服务,然后点击获取授权码(需要发送短信)

2.2 写测试方法

    @Autowired
    JavaMailSenderImpl mailSender;

    @Test
    void contextLoads() {
        SimpleMailMessage mailMessage = new SimpleMailMessage();
        //邮件设置
        //标题
        mailMessage.setSubject("通知,下午开会");
        //内容
        mailMessage.setText("3点钟");
        //收件人邮箱
        mailMessage.setTo("[email protected]");
        //发件人邮箱
        mailMessage.setFrom("[email protected]");
        mailSender.send(mailMessage);
    }

测试成功

2.3、测试发送复杂邮件(带附件,html代码片段。。。)

    @Test
    public void test02() throws MessagingException {
        //创建一个复杂的消息邮件
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        //用mimeMessageHelper对邮箱进行设置
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
        //标题
        mimeMessageHelper.setSubject("通知,下午开会");
        //内容(可含html代码片段的话在后面添加参数true)
        mimeMessageHelper.setText("<b style=‘color:red‘>4点钟</b>",true);
        //收件人邮箱
        mimeMessageHelper.setTo("[email protected]");
        //发件人邮箱
        mimeMessageHelper.setFrom("[email protected]");
        //上传附件
        mimeMessageHelper.addAttachment("小黄人",new File("E:\\pythonTest\\alien_invasion\\images\\icon.jpg"));
        mailSender.send(mimeMessage);
    }

测试成功

原文地址:https://www.cnblogs.com/lyh233/p/12702329.html

时间: 2024-07-31 01:27:10

36、springboot——异步任务、定时任务、邮件任务的相关文章

springboot中的任务(异步任务--定时任务--邮件任务)

1.pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4

SpringBoot几种定时任务的实现方式

原文地址:SpringBoot几种定时任务的实现方式 定时任务实现的几种方式: Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行.一般用的较少. ScheduledExecutorService:也jdk自带的一个类:是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响. Spring Tas

Celery+python+redis异步执行定时任务

我之前的一篇文章中写了[Celery+django+redis异步执行任务] 博文:http://blog.csdn.net/apple9005/article/details/54236212 你会发现,这些代码并不依赖django框架,随便写到一个py文件中,就可以轻松的执行成功,这是因为这些代码并没有用到django-celery,django-redis等依附于django框架的东西. 今天,参照官方文档示例,测试一下celery的异步执行定时任务如何.我先是在django框架内执行了一

带着新人学springboot的应用09(springboot+异步任务)

本来想说说检索的,不过不知道什么鬼,下载ElasticSearch太慢了,还是放一下,后面有机会再补上!今天就说个简单的东西,来说说任务. 什么叫做任务呢?其实就是类中实现了一个什么功能的方法.常见的任务就是异步任务,定时任务,发邮件. 异步任务:其实就是一个很特别的方法,这个方法没有返回值(也可以有返回值,后面会说的),但是方法内部的逻辑会耗费很多时间!例如,用户请求每次到controller,要执行到这个异步方法的时候,我们只需要命令一个空闲状态的线程去执行它即可,由于没有返回值不影响后续代

在SpringBoot中配置定时任务

前言 之前在spring中使用过定时任务,使用注解的方式配置很方便,在SpringBoot中的配置基本相同,只是原来在spring中的xml文件的一些配置需要改变,在SpringBoot中也非常简单. 已经加入我的github模版中:https://github.com/LinkinStars/springBootTemplate 定时任务的分类 所谓定时任务,就是在项目启动之后,定时的去执行一个任务,从而满足业务的需要. 定时任务分为下面几种,串行,并行,同步,异步 串行,并行:当配置了多个定

IntelliJ IDEA 2017版 spring-boot 2.0.5 邮件发送简单实例 (三)

一.搭建SpringBoot项目 详见此文:https://www.cnblogs.com/liuyangfirst/p/8298588.html 注意: 需要添加mail依赖的包,同时还添加了lombock,方便日志打印.如图所示 二.启动Application,测试项目搭建是否成功 三.配置properties文档 1 #########邮箱协议 2 spring.mail.host=smtp.163.com ####还可以是smtp.126.com 等 3 ##########发送邮件的用

SpringBoot几种定时任务的实现方式 和多线程执行任务

定时任务实现的几种方式: Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行.一般用的较少. ScheduledExecutorService:也jdk自带的一个类:是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响. Spring Task:Spring3.0以后自带的task,可以将它看成

SpringBoot中并发定时任务的实现、动态定时任务的实现(看这一篇就够了)

# 一.在JAVA开发领域,目前可以通过以下几种方式进行定时任务 1.单机部署模式 Timer:jdk中自带的一个定时调度类,可以简单的实现按某一频度进行任务执行.提供的功能比较单一,无法实现复杂的调度任务. ScheduledExecutorService:也是jdk自带的一个基于线程池设计的定时任务类.其每个调度任务都会分配到线程池中的一个线程执行,所以其任务是并发执行的,互不影响. Spring Task:Spring提供的一个任务调度工具,支持注解和配置文件形式,支持Cron表达式,使用

SpringBoot:实现定时任务

一.定时任务实现的几种方式: Timer 这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行.一般用的较少. ScheduledExecutorService 也jdk自带的一个类:是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响. Spring Task Spring3.0以后自带的task,可以将它