详解Springboot中的异步、定时、邮件任务

网友投稿 262 2022-09-18


详解Springboot中的异步、定时、邮件任务

目录一、异步任务1、编写一个类AsyncService2、编写一个AsyncController类3、开启异步二、邮件任务1、引入依赖2、配置mail3、测试三、定时任务1、编写一个ScheduledService类2、添加注解

一、异步任务

1、编写一个类AsyncService

异步处理还是非常常用的,比如我们在网站上发送邮件,后台会去发送邮件,此时前台会造成响应不动,直到邮件发送完毕,响应才会成功,所以我们一般会采用多线程的方式去处理这些任务。

package com.rk.service;

import org.springframework.scheduling.annotation.Async;

import org.springframework.stereotype.Service;

@Service

public class AsyncService {

public void hello(){

try {

System.out.println("数据处理中~");

Thread.sleep(3000);//停止三秒

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

2、编写一个AsyncController类

package com.rk.controller;

import com.rk.service.AsyncService;

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.hello();

return "success";

}

}

现在启动项目进行测试,三秒后才会出现success,现在还不是异步

3、开启异步

@Async//告诉spring这是一个异步方法

public void hello(){

try {

System.out.println("数据处理中~");

Thread.sleep(3000);//停止三秒

} catch (InterruptedException e) {

e.printStackTrace();

}

}

@EnableAsync//开启异步注解功能

@SpringBootApplication

public class Sprihttp://ngboot09TestApplication {

public static void main(String[] args) {

SpringApplication.run(Springboot09TestApplication.class, args);

}

}

二、邮件任务

1、引入依赖

org.springframework.boot

spring-boot-starter-mail

2、配置mail

#用户名

spring.mail.username=1624603357@qq.com

#密码

spring.mail.password=yblyxhvmnsurbbci

#发送邮件服务器

spring.mail.host=smtp.qq.com

#开启加密验证 ssl

spring.mail.properties.mail.smtp.ssl.enable=true

3、测试

简单邮件

@Autowired

javaMailSenderImpl mailSender;

@Test

void contextLoads() {

SimpleMailMessage mailMessage = new SimpleMailMessage();

mailMessage.setSubject("你好,rk");//邮件标题

mailMessage.setText("测试邮件");//邮件内柔

mailMessage.setTo("r1624603357@126.com");//收件人邮箱

mailMessage.setFrom("1624603357@qq.com");//发件人邮箱

mailSender.send(mailMessage);

}

复杂邮件

@Test

void contextLoads2() throws MessagingException {

//一个复杂的邮件

MimeMessage mimeMessage = mailSender.createMimeMessage();

//组装

MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

//正文

helper.setSubject("你好,rk");

helper.setText("

//附件

helper.addAttachment("1.png",new File("D:\\QLDownloadGame\\2\\1.png"));

helper.addAttachment("rk.docx",new File("E:\\桌面\\rk.docx"));

// 发/收件人

helper.setTo("r1624603357@126.com");

helper.setFrom("1624603357@qq.com");

//发送

mailSender.send(mimeMessage);

}

三、定时任务

1、编写一个ScheduledService类

@Service

public class ScheduledService {

//秒 分 时 日 月 周几

//0 * * * * MON-FRI

//注意cron表达式的用法; 每天20:28 0秒执行该方法

@Scheduled(cron = "0 28 20 * * 0-7")

public void hello(){

System.out.println("现在是20:28");

System.out.println("hello.....");

}

}

项目启动后每天20:28:00执行hello方法

2、添加注解

@EnableAsync//开启异步注解功能

@EnableScheduling//开启定时功能注解

@SpringBootApplication

public class Springboot09TestApplication {

public static void main(String[] args) {

SpringApplication.run(Springboot09TestApplication.class, args);

}

}

cron表达式练习

/*

【0 0/5 14,18 * * ?】每天14点整和18点整,每隔5分钟执行一次

【0 15 10 ? * 1-6】每个月的周一-周六10:15分执行一次

【0 0 2 ? * 6L】每个月的最后一个周六凌晨2点执行一次

【0 0 2 LW * ?】每个月的最后一个工作日凌晨2点执行一次

【0 0 2-4 ? * 1#1】每个月的第一个周一凌晨2点到4点期间,每个整点都执行一次

*/


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:华为设备配置PIM-SM命令(华为交换机配置)
下一篇:使用mstp+vrrp+静态路由+子网划分+DHCP实验案例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~