SpringBoot任务:
一、异步任务:
1、定义service
@Service @Async public class SyncService { public void demo(){ try { // 模拟网站延迟的情况 Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("程序正在处理~"); } }
2、编写controller,在请求中调用service
@Autowired SyncService syncService;
@RequestMapping("/test") public String test() { syncService.demo(); // 程序到这里会停止三秒 return "ok!"; }
3、测试
请求: localhost:8080/test 这里是模拟网站的延迟情况,如果延迟三秒钟,那么网站就会一直转圈圈,对于用户的体验很不好,所以:
在Service的类上或者方法中使用 @Async ,并在主入口(启动类)上使用 @EnableAsync 开启异步任务,网页会很快刷新、
二、邮件发送
导入依赖:
<!--邮件发送--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> <version>2.2.6.RELEASE</version> </dependency> <!--thymeleaf模板引擎--> <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf-spring5</artifactId> </dependency> <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-java8time</artifactId> </dependency>
在properties中配置自己的邮件信息:
1 spring.mail.username=1820712542@qq.com 2 spring.mail.password=ehhtnaacqihleaai 3 # 设置SMTP服务主机地址 4 spring.mail.host=smtp.qq.com 5 # QQ邮箱特别要设置的ssl加密规则 6 spring.mail.properties.mail.smtp.ssl.enable=true 7 # 默认编码(默认) 8 spring.mail.default-encoding=utf-8 9 # SMTP服务器使用的协议(默认) 10 # spring.mail.protocol=smtp
1、简单邮件发送
// 邮件发件人 @Resource JavaMailSenderImpl mailSender; @Test void test1() { SimpleMailMessage message = new SimpleMailMessage(); // 设置邮件发件人 message.setFrom("1820712542@qq.com"); // 设置邮件收件人 message.setTo("zhang_zhixi@qq.com"); // 设置邮件主题 message.setSubject("这是一封来自未来的邮件"); // 设置邮件发送的内容 message.setText("小伙纸,你能成大事~"); // 发送 mailSender.send(message); }
2、复杂(附件)邮件发送
// 邮件发件人 @Resource JavaMailSenderImpl mailSender; @Test void test2() throws MessagingException, ParseException { // 复杂的邮件发送 MimeMessage message = mailSender.createMimeMessage(); // 组装(true:支持内联元素和附件*的多部分消息) MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8"); // 设置邮件发件人 helper.setFrom("1820712542@qq.com"); // 设置邮件收件人 helper.setTo(new String[]{"zhang_zhixi@qq.com"}); // 设置邮件发送时间 //helper.setSentDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2021-2-1 11:20:00")); // 设置邮件发送主题 helper.setSubject("查收今天的第二封邮件~"); // 正文 helper.setText("<p style='color:red'>加油,干饭人!</p>", true); // 发送附件 helper.addAttachment("demo.jpg", new File("C:\Users\华信彭于晏\Pictures\壁纸\demo.jpg")); // 发送 mailSender.send(message); }
3、表单提交邮件,实现发送
表单信息:
1 <form th:action="@{/email}" method="post"> 2 发送方邮件地:<input type="email" th:name="email"><br> 3 收件方邮件地:<input type="email" th:name="toEmail"><br> 4 邮件主题:<input type="text" th:name="subject"><br> 5 邮件内容:<input type="text" th:name="text"><br> 6 <input type="submit" th:value="提交"> 7 </form>
controller发送请求:
1 @Controller 2 public class EmailSendController { 3 4 @RequestMapping("/") 5 public String toIndex() { 6 return "index"; 7 } 8 9 @Autowired 10 JavaMailSenderImpl mailSender; 11 12 @RequestMapping("/email") 13 @ResponseBody 14 public String toEmailSend(HttpServletRequest request) throws MessagingException { 15 String email = request.getParameter("email"); 16 System.out.println(email); 17 String toEmail = request.getParameter("toEmail"); 18 System.out.println(toEmail); 19 String subject = request.getParameter("subject"); 20 System.out.println(subject); 21 String text = request.getParameter("text"); 22 System.out.println(text); 23 24 // 复杂的邮件发送 25 MimeMessage message = mailSender.createMimeMessage(); 26 // 组装(true:支持内联元素和附件*的多部分消息) 27 MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8"); 28 29 // 设置邮件发件人 30 helper.setFrom(email); 31 // 设置邮件收件人 32 helper.setTo(toEmail); 33 // 设置邮件发送主题 34 helper.setSubject(subject); 35 // 正文 36 helper.setText("<p style='color:red'>" + text + "</p>", true); 37 38 // 设置邮件发送时间 39 //helper.setSentDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2021-2-1 11:20:00")); 40 // 发送附件 41 // helper.addAttachment("demo.jpg", new File("C:\Users\华信彭于晏\Pictures\壁纸\demo.jpg")); 42 43 // 发送 44 mailSender.send(message); 45 return "邮件发送成功~可能有延迟,请稍后进行查看!"; 46 } 47 }
三、定时任务
TaskScheduler //任务调度程序 TaskExecutor //任务执行者 @EnableScheduling //开启定时功能的注解,放在主入口 @Scheduled //什么时候执行
在方法上面加上@Scheduled(cron = "0 43 14 * * ?")
并加上相应的cron表达式即可
常用表达式例子 (1)0/2 * * * * ? 表示每2秒 执行任务 (1)0 0/2 * * * ? 表示每2分钟 执行任务 (1)0 0 2 1 * ? 表示在每月的1日的凌晨2点调整任务 (2)0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15执行作业 (3)0 15 10 ? 6L 2002-2006 表示2002-2006年的每个月的最后一个星期五上午10:15执行作 (4)0 0 10,14,16 * * ? 每天上午10点,下午2点,4点 (5)0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时 (6)0 0 12 ? * WED 表示每个星期三中午12点 (7)0 0 12 * * ? 每天中午12点触发 (8)0 15 10 ? * * 每天上午10:15触发 (9)0 15 10 * * ? 每天上午10:15触发 (10)0 15 10 * * ? 每天上午10:15触发 (11)0 15 10 * * ? 2005 2005年的每天上午10:15触发 (12)0 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发 (13)0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发 (14)0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 (15)0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发 (16)0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发 (17)0 15 10 ? * MON-FRI 周一至周五的上午10:15触发 (18)0 15 10 15 * ? 每月15日上午10:15触发 (19)0 15 10 L * ? 每月最后一日的上午10:15触发 (20)0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发 (21)0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一个星期五上午10:15触发 (22)0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发