1 异步任务
1.1 概述
- 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理和第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring3.x之后,就已经内置了@Async来完美解决这个问题。
1.2 使用步骤
- 使用@EnableAysnc注解开启异步功能。
- 将@Async注解标注在需要异步的类或方法上。
1.3 应用示例
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>
package com.sunxiaping.springboot;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.scheduling.annotation.EnableAsync;@SpringBootApplication@EnableAsync //开启异步注解功能public class SpringbootApplication { public static void main(String[] args) { SpringApplication.run(SpringbootApplication.class, args); }}
package com.sunxiaping.springboot.service;import org.springframework.scheduling.annotation.Async;import org.springframework.stereotype.Service;@Servicepublic class AsyncService { @Async public void hello(){ try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("。。。。数据处理中。。。。"); }}
package com.sunxiaping.springboot.web;import com.sunxiaping.springboot.service.AsyncService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping(value = "/async")public class AsyncController { @Autowired private AsyncService asyncService; @GetMapping(value = "/hello") public String hello() { asyncService.hello(); return "成功"; }}
2 定时任务
2.1 概述
- 项目开发中经常需要执行一些定时任务,比如需要在每天凌晨的时候,分析一次前一天的日志信息。Spring为我们提供了异步执行任务调度的方式,提供TaskExecutor、TaskScheduler接口。
2.2 使用步骤
- 使用@EnableScheduling注解开启定时任务功能。
- 将@Scheduled注解标注需要定时的类或方法上。
2.3 应用示例
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>
- 使用@EnableScheduling注解开启定时任务功能:
package com.sunxiaping.springboot;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.scheduling.annotation.EnableScheduling;@SpringBootApplication@EnableSchedulingpublic class SpringbootApplication { public static void main(String[] args) { SpringApplication.run(SpringbootApplication.class, args); }}
package com.sunxiaping.springboot.service;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Service;@Servicepublic class ScheduledService { @Scheduled(cron = "*/5 * * * * ?") public void hello(){ System.out.println("hello"); }}
3 邮件任务
3.1 导入相关jar包的Maven坐标
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId></dependency>
3.2 配置application.yml
spring: mail: username: 1900919313@qq.com password: unwcjvjwuknlbffb #授权码 host: smtp.qq.com properties: mail: smpt: ssl: enable: true
3.3 测试
package com.sunxiaping.springboot;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.JavaMailSender;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;@SpringBootTest@RunWith(SpringRunner.class)public class SpringbootApplicationTests { @Autowired private JavaMailSender mailSender; /** * 简单邮件 */ @Test public void test(){ SimpleMailMessage message = new SimpleMailMessage(); //设置邮件 message.setSubject("通知--开会啦"); message.setText("一会开会啊"); message.setTo("1975356467@qq.com"); message.setFrom("1900919313@qq.com"); mailSender.send(message); } /** * 复杂邮件 */ @Test public void test2() throws MessagingException { MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true); //设置邮件 helper.setSubject("通知--开会啦"); helper.setText("<b style='color:red'>今天开会啦</b>",true); helper.setTo("1975356467@qq.com"); helper.setFrom("1900919313@qq.com"); helper.addAttachment("1.jpg", new File("C:\\Users\\Administrator\\Pictures\\1.png")); mailSender.send(mimeMessage); }}