测试代码
Controller层
@RestController public class HelloController { @Autowired private AsyncService asyncService; @RequestMapping("/hello") public String hello(){ asyncService.test(); return "ok"; } }
@Service public class AsyncService { public void test(){ try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("数据正在处理"); } }
我们就可以去测试了,我们需要等待三秒之后前台才能接收到数据,影响用户体验,我们可以先把数据提交到前台,然后再处理数据,一般开启线程解决,而在SpringBoot中我们只需要简简单单的两个注解就可以实现预想的效果
主类添加@EnableAsync表示启用异步处理功能
方法添加@Async注解,告诉Spring这是一个异步处理方法
@Service public class AsyncService { @Async //告诉Spring这是一个异步方法 public void test(){ try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("数据正在处理"); } }邮件任务
在原来的阶段,我们发送邮件需要自己导包写入一大堆配置么人在SpringBoot中我们只需要简简单单的几行代码就能实现我们的需求
导入依赖(启动器)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
在SpringBoot原理初探中,我们知道SpringBoot的核心是自动装配,每个功能都有自动装配类和属性类,所以这个也不例外,双击Shift查找MailAutoConfig,找到自动装配类
可以发现已经有定义好的JavaSenderImpl,我们可以直接拿来用
@SpringBootTest class Springboot08AsyncMailTimingprojectApplicationTests { @Autowired private JavaMailSenderImpl mailSender; @Test void contextLoads() { //一个简单的邮件测试 SimpleMailMessage mailMessage = new SimpleMailMessage(); //设置主题,内容,从哪来,到哪去 mailMessage.setSubject("这是测试邮件"); mailMessage.setText("苏绪南,你好呀!"); mailMessage.setFrom("1429473191@qq.com"); mailMessage.setTo("1429473191@qq.com"); mailSender.send(mailMessage); System.out.println("发送成功"); } @Test void Test02() throws MessagingException { //一个复杂邮件测试 MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true); helper.setText("<p style='color: red;'>苏绪南你好啊</p>",true); helper.setSubject("这是一封复杂邮件"); helper.setTo("1429473191@qq.com"); helper.setFrom("1429473191@qq.com"); //添加一个附件 helper.addAttachment("1.jpg",new File("D:\\图片\\。。。\\1.jpg")); mailSender.send(mimeMessage); } }定时任务
定时任务SpringBoot中已经内置了无需我们导入依赖,定时任务相关的两个接口
TaskScheduler //任务调度者
TaskExecutor //任务执行者
我们还需要两个注解
@EnableScheduling 开启定时任务功能的注解
@Scheduled 什么时候执行
cron表达式
首先我们在主类标注@EnableScheduling 注解开启定时任务功能的注解
然后创建ScheduledService
@Service public class ScheduledService { //cron 表达式 //秒 分 时 日 月 0-7(周一到周日,0和7都表示周日) /** 30 15 10 * * ? 每天10点15分30秒跑一次 * 30 0/5 10,18 * * ? 每天10点和18点每隔5分钟跑一次 * 0 15 10 ? * 1-6 每个月的周一到周六 10点15分就会跑一次 * 注意 ? 只能用在日期和星期的位置 */ @Scheduled(cron = "0 59 * * * ?") public void test(){ System.out.println("hello,你被执行了"); } }