---恢复内容开始---html
直接步入正题。java
异步任务比较简单,只须要两个注解就能够搞定,咱们直接来看如何使用:web
一、建立一个service,带上@EnableAsync,就是开启异步任务的注解模式。spring
二、在须要异步处理的方法前加上注解@Async,该方法就会按照异步处理了。浏览器
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.stereotype.Service; @EnableAsync @Service public class AsyncService { @Async public void asynv() { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("数据处理中……"); } }
那如何来证实咱们的异步处理是能够的呢?安全
一、写一个controller,咱们浏览器中访问一下以前没有加注解的页面,应该是须要等待3秒,才有相应返回success的;服务器
二、加上异步处理的注解,咱们再次访问,就会发现,相应变的很快了;这就是异步处理任务成功了。app
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class AsyncController { @Autowired AsyncService asyncService; @GetMapping("/hello") public String hello() { asyncService.asynv(); return "success"; } }
定时任务在平时的工做中,常常被用到,好比日志处理、或者天天凌晨进行自动化脚本、或者每个月生成报表之类的。异步
一样只须要了解两个注解就能够了。async
咱们来建立一个service看下(执行主程序,你会发现,每到0秒的时候就会打印一个hello):
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @EnableScheduling @Service public class ScheduledService { /** * minute, hour, day of month, month, day of week * 格式:"0 * * * * 1-5" * 说明:举例的格式表示周一到周五的每分钟整,若是把0换成*就是每周一到周五的每秒处理任务了 * * 其余:处理具体值,这个式子中还支持一些特殊符号,好比: * , 表示 枚举。 1,2,3,4 表示每分钟的1,2,3,4秒的时候执行 * - 表示 区间。 0-4就是0到4秒之间,每秒执行,同上边 * * 表示 任意。 每的意思 * ? 表示 日/星期冲突匹配。 好比咱们设置了mon,又设置了天天。那么为了匹配,咱们要把*换成? * / 表示 步长。 0/4就是每4秒执行一次 * L 表示 最后。 * W 表示 工做日。 * C 表示 和calendar联系并计算后的值。 * # 表示 星期,4#2就是第二个星期四。 */ @Scheduled(cron = "0 * * * * 1-5") public void scheduled() { System.out.println("hello"); } }
为了更好的帮助理解,这里再举例几个:
【0 0/5 12,18 * * ?】 天天12点和18点,从整点开始,每隔5分钟执行一次
【0 0 2 ? * 1L】 天天月的最后一个星期一的凌晨2点执行一次
邮件任务,须要引入这个到pom
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
为了收发邮件,确定是要先配置一下邮件的收发方,以及邮件发送的帐号和密码(放心不是我的登陆密码)。
注意看下边password和host的填写:
1.password:我以网易邮箱为例,在邮箱设置里,会有POP3/SMTP这类的设置,咱们就是用这种方式来使用邮箱的。当咱们勾选了这个SMTP服务之后,会出现一系列的弹窗,让咱们确认使用受权码登陆第三方邮件的客户端,也就是说,咱们用生成的受权码,做为咱们须要的邮箱登陆密码便可,这个是安全。
2.host:就是下边红框中的服务器地址了
spring.mail.username=ice@163.com spring.mail.password=sjaksiquskaosjeq spring.mail.host=smtp.163.com
# 下边的properties是配置邮件的其余信息,好比通常邮箱都须要这个SSL的安全设置
spring.mail.properties.mail.smtp.ssl.enable=true
如此一来,咱们配置好了邮箱信息,开始写一个测试类看下:
1.先发送一个简单的邮件作测试,执行测试后,去到收件的邮箱查看,应该就能够看到咱们发送的邮件了,表示成功!
@RunWith(SpringRunner.class) @SpringBootTest public class TaskApplicationTests { @Autowired JavaMailSenderImpl javaMailSender; @Test public void contextLoads() { SimpleMailMessage message = new SimpleMailMessage(); // 设置邮件信息 message.setSubject("这个是邮件标题的设置"); message.setText("这个是邮件的内容"); message.setTo("1234@qq.com","xxxx"); // 能够给多人发 message.setFrom("ice@163.com"); // 由谁发送 javaMailSender.send(message); } }
2.除了上述这个简单的邮件,咱们再看看,如何发送带有html或者附件之类的内容的邮件,而后去到邮箱看看是否成功吧!
@Test public void test() throws Exception { // 建立一个复杂消息的邮件 MimeMessage mimeMailMessage = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMailMessage, true); // 发送html格式信息 helper.setSubject("这个是邮件标题的设置"); helper.setText("<b style='color:red'>这个是邮件的内容</b>", true); helper.setTo("1234@qq.com"); helper.setFrom("ice@163.com"); // 由谁发送 // 上传附件 helper.addAttachment("a.jpg", new File("C:\\User\\ice\\Pictures\\a.jpg")); helper.addAttachment("b.jpg", new File("C:\\User\\ice\\Pictures\\b.jpg")); javaMailSender.send(mimeMailMessage); }