背景:

        在开发过程中我们会遇到一些相关的任务工作进行,比如在设计过程中我们会遇到异步任务,定时任务的开发需求还有一些类似于邮件任务的需求,所以就需要我们进行相关的Task的设计,SpringBoot自带一些机制可以实现任务的设计。下面详细介绍任务的开发设计。

一. 异步任务的开发使用(异步就是说该函数的执行不是顺序的,而是可以同步执行下面的程序流程)

步骤:

首先就是开启异步注解功能。(在主函数中使用@EnableAsync //开启异步注解功能)

@EnableAsync //开启异步注解功能
@SpringBootApplication
public class DemoTaskApplication {

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

然后就是设计异步的相关任务函数。(在对应的异步函数名上面添加@Async注解)

//异步任务的相关测试方法
@Service
public class AsyncService {
    //告诉Spring这是一个异步方法
    @Async
    public void Hello(){
        try {
            //睡眠3秒
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("处理数据中....");
    }
}

最后就是控制功能函数:

@RestController
public class AsyncController {
    @Autowired
    AsyncService asyncService;
    @GetMapping("/hello")
    public String hello(){
        //异步就是说该方法和下面的执行过程可以同时执行
        asyncService.Hello();
        return "Success!";
    }
}

 在测试过程中结果如下:http://localhost:8080/hello

出现Success的执行过程,同时也会进行入异步函数执行相关的函数任务。

二. 定时任务的开发使用(定时任务就是按照设定的方式会自动的执行该函数方法)

首先就是启动定时注解功能(在主函数中使用@EnableScheduling //开启定时功能)

@EnableScheduling //开启定时功能
@SpringBootApplication
public class DemoTaskApplication {

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

然后就是设计定时任务该函数(在对应的定时函数中添加注解@Scheduled)

//定时任务的相关测试

@Service
public class TimeService {
    /**
     *  cron的顺序:秒,分,时,日,月,周几
     *  每秒进行启动则采用:* * * * * MON-FRI就可以。*表示任意的时间
     */
    //@Scheduled(cron = "0 * * * * MON-FRI") //表示整秒0秒启动,也就是周一到周五每一分钟都进行启动。
    //@Scheduled(cron = "0,1,2,3 * * * * MON-FRI") //逗号表示枚举,0秒1秒2秒3秒都会进行进行启动。
    //@Scheduled(cron = "0-3 * * * * MON-FRI") //-表示区间内执行,0秒1秒2秒3秒都会进行进行启动。
    //@Scheduled(cron = "0/4 * * * * MON-FRI") //  "/"表示步长内执行也就是0秒的时候进行启动,然后每隔4秒执行一次。
    @Scheduled(cron = "0/4 * * * * 0-7")  //  "/"表示步长内执行也就是0秒的时候进行启动,然后每隔4秒执行一次。
    public void hello2() {
        System.out.println("Hello....");
    }
}

最后执行的结果就是:(每隔4秒就会自动的执行该函数,还有很多其他的定制方法可以看相关的定时任务的设计)

2020-08-03 18:53:29.947  INFO 37048 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-08-03 18:53:29.956  INFO 37048 --- [           main] com.example.demo.DemoTaskApplication     : Started DemoTaskApplication in 1.182 seconds (JVM running for 1.905)
Hello....
Hello....
Hello....
Hello....

三. 邮件任务的开发使用

首先就是配置文件进行邮件任务的配置以及邮箱的相关设置(这里采用的服务是QQ邮箱服务)

具体的操作如下打开QQ邮箱,然后进入设置页面,点击账户,最后往下拉取,看到POP3服务,进行开启。获取相关授权码(y用于替代密码,是一种类似于Oauth的一种授权),例如在这里我的授权码为:asdzxc123

spring task会触发多次 springboot task_spring

 

spring task会触发多次 springboot task_java_02

 接着就是关于SpringBoot的相关配置:

A:添加相关的依赖包

<!--        添加启动邮箱任务-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
</dependencies>

B:配置文件的相关配置

#自己的qq邮箱或者是发送者公司的相关账号
spring.mail.username=xxxxxx@qq.com
#配置的是加密后的授权码
spring.mail.password=zwaguoizzuzufaac
#下面的Host是固定的,所有的QQ邮箱都是通过这个邮箱服务器
spring.mail.host=smtp.qq.com
#关于安全的配置SpringBoot1.x版本需要添加这个,2.x版本默认为True
spring.mail.properties.mail.smtp.ssl.enable=true

最后就是关于邮箱的信息发送:

一共分为两种:即简单邮箱和复杂邮箱(带有附件或者Html样式)发送。

简单邮箱:

/**
     * 简单邮箱的发送
     */
    @Autowired
    JavaMailSenderImpl javaMailSender;

    @Test
    void contextLoads() {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        //邮件设置
        simpleMailMessage.setSubject("通知明天展厅值班,记得带东西!");
        simpleMailMessage.setText("明天早上9点左右,出口技术部会带东西给你。");
        simpleMailMessage.setTo("xxxxxx86@gmail.com");
        simpleMailMessage.setFrom("xxxxxx@qq.com");    //要求和配置文件的username邮箱一致。
        javaMailSender.send(simpleMailMessage);
    }

复杂邮箱:

/**
     * 复杂邮箱的发送,包括附件的发送
     */
    @Test
    public void test02() throws MessagingException {
        //创建一个复杂的邮件消息
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
        //邮件的设置
        mimeMessageHelper.setSubject("今天开会!");
        mimeMessageHelper.setText("<b style='color:red'>今天 9点半 有人送设备给你</b>" ,true);  //默认为false不启动html样式,开启后发送的信息就会自动为Html样式。
        mimeMessageHelper.setTo("xxxxxx86@gmail.com");
        mimeMessageHelper.setFrom("xxxxxx@qq.com");
        //上传文件
        mimeMessageHelper.addAttachment("1.jpg",new File("C:\\Users\\gree\\Pictures\\Screenshots\\1.jpg"));
        javaMailSender.send(mimeMessage);
    }