【SpringBoot-任务 03】

主要包含:异步任务,定时任务,邮件任务

一、异步任务

 在Java应用中,绝大多数情况下都是同步完成交互的,但是和第三方交互时会出现延迟,springboot提供了异步处理的方式解决了这种问题

1、主要有两个注解完成:

@Aysnc   告诉springboot这是一个异步任务
@EnableAysnc   开启异步任务   --->启动类上加此注解

@Service
public class Taskyibu {

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

        System.out.println("seccess!");
    }
}

二、定时任务

springboot提供了两个注解:@EnableScheduling(开启定时任务注解)、@Scheduled(设置定时计划注解)

cron表达式

常用的集中定时计划

每一位代表对应的
second(秒), minute(分), hour(时), day of month(日), month(月), day of week(周几).
0 * * * * MON-FRI 【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点期间,每个整点都执行一次;

下面是针对秒,不通的写法

【0 * * * * MON-SAT】  周一到周六整秒执行
【0-4 * * * * MON-SAT】 周一到周六0到4秒执行
【0,1,2,3,4 * * * * MON-SAT】周一到周六0到4秒执行0/4 * * * * MON-SAT】周一到周六0到4秒执行
@Service
public class SchedulerService {

    @Scheduled(cron = "0 * * * * MON-SAT")
    public void test(){
        System.out.println("hello!");
    }

}

对那个类想做定时任务,就可以在类上加@Scheduled

三、邮件任务

Spring Boot 自动配置MailSenderAutoConfiguration

发邮件的原理是:在springboot中配置邮箱服务器,然后通过配置的邮箱服务器发送邮件

1、引入pom文件

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

2、application.properties文件内配置邮件服务器

spring.mail.username=1832785141@qq.com
spring.mail.password=qskacaztriqrbhdj
spring.mail.host=smtp.qq.com
#需要配置一个ssl的安全配置
spring.mail.properties.mail.smtp.ssl.enable=true

已qq邮箱举例:

password不是qq登录时的邮箱,而是qq授权后生成的授权码

 host可以通过开启任务的第二项IMAP/SMTP服务,点击进去查看

3、自动装配JavaMailSender发送邮件

package com.wufq.task;


import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.test.context.junit4.SpringRunner;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

@RunWith(SpringRunner.class)
@SpringBootTest
public class TaskApplicationTests {

    //自动注入JavaMailSender邮件发送器
    @Autowired
    JavaMailSenderImpl mailSender;


    //发送文本类型的简单邮件
    @Test
    public void contextLoads() {
        //创建简单的邮件发送对象
        SimpleMailMessage message = new SimpleMailMessage();
        //邮件设置
        message.setSubject("通知-今天放假"); //设置标题
        message.setText("下午2点放假!"); //设置文本
        message.setTo("wufuqiangtest@163.com","wufuqiangtesting@163.com"); //收信人,可以给多个邮箱发送
        message.setFrom("1832785141@qq.com"); //发送人

        mailSender.send(message);

    }

    //发送带附件这样的复杂邮件
    @Test
    public void test() throws MessagingException {
        //1、创建一个复杂的消息邮件
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);//如果要上传文件,设置为true

        //邮件设置
        helper.setSubject("通知-中秋放假"); //设置标题
        helper.setText("<b style='color:red'>放假三天</b>",true); //设置文本,true为html
        helper.addAttachment("1.jpg",new File("/Users/wufq/Desktop/1.jpg"));
        helper.addAttachment("2.jpg",new File("/Users/wufq/Desktop/2.jpg"));
        helper.setTo("wufuqiangtest@163.com");//收信人,可以给多个邮箱发送
        helper.setFrom("1832785141@qq.com"); //发送人

        mailSender.send(mimeMessage);
    }

}
原文地址:https://www.cnblogs.com/frankruby/p/15305821.html