背景:
在开发过程中我们会遇到一些相关的任务工作进行,比如在设计过程中我们会遇到异步任务,定时任务的开发需求还有一些类似于邮件任务的需求,所以就需要我们进行相关的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
接着就是关于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);
}