一、邮件发送
- 使用spring的邮件发送功能 首先需要导入mail启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
- 打开邮箱设置 获取授权码
在QQ邮箱中的设置->账户->开启pop3和smtp服务
此时会得到一个字符串 用作配置的password
- 配置
mail
的properties
文件
spring.mail.username=1471305491@qq.com
spring.mail.password=zlcjmkidrwkojbji
spring.mail.host=smtp.qq.com
# 如果是qq 开启加密验证
spring.mail.properties.mail.smtp.ssl.enable=true
- 引入
JavaMailSenderImpl
类
这个类是springboot帮我们写好的 我们只需要引入它 并自动装配
@Autowired
JavaMailSenderImpl javaMailSender;
- 编写邮件类
- 使用
javaMailSender
的send方法,通过原码我们得到它需要一个SimpleMailMessage()
对象于是我们就创建这个对象
- 使用
SimpleMailMessage message = new SimpleMailMessage();
javaMailSender.send(message);
-
-
使用message对象 编写邮件
通过message.set 我们发现了一系列方法
!](https://img-blog.csdnimg.cn/96915085d5bb4ae091d323de21fc9f94.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FtYXppbmc2Ng==,size_16,color_FFFFFF,t_70)
-
//主题
message.setSubject("你好~");
//内容
message.setText("xiexieni");
//接受方
message.setTo("1471305491@qq.com");
//发送方
message.setFrom("1471305491@qq.com");
这样子 一个邮件类就写完了 最后运行就可以发送到指定邮箱了
package com.llf;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
@SpringBootTest
class SpringbootTaskEmailApplicationTests {
@Autowired
JavaMailSenderImpl javaMailSender;
@Test
void contextLoads() {
SimpleMailMessage message = new SimpleMailMessage();
//主题
message.setSubject("你好~");
//内容
message.setText("xiexieni");
//接受方
message.setTo("1471305491@qq.com");
//发送方
message.setFrom("1471305491@qq.com");
javaMailSender.send(message);
}
}
二、异步控制
在生活中有许多异步控制的例子,拿充话费来说,通常都是充值成功以后会立马提醒你,你已经充值成功了。但是实际花费到账的时间往往会滞后几分钟,这里就用到了多线程、异步控制的知识。
首先 如果我们不采用异步控制 来访问一个页面
//Service
public void hello(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("你被执行了");
}
// Controller
@Controller
public class AsyncController {
@Autowired
AsyncService asyncService;
@GetMapping("/")
@ResponseBody
public String Asnyc(){
asyncService.hello();
return "ok";
}
}
按照正常运行 我们会在页面上卡3s 然后进入ok页面 紧接着 控制台输出
如果网站这样,那么一定会很影响用户的体验,有没有方法可以使数据和提示分开执行 ,用户可以提前进入 但是数据滞后呢?
这个时候异步控制就出来了
配置异步控制很简单 首先在需要执行的方法上添加@Async
注解 然后在启动类上添加@EnableAsync
注解即可
//告诉spring这是一个异步任务 它会帮我们开启线程池
@Async
public void hello(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("你被执行了");
}
@EnableAsync
@SpringBootApplication
public class SpringbootTaskEmailApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootTaskEmailApplication.class, args);
}
}
继续访问
这样就实现了异步任务
三、定时任务
定时任务和异步控制一样 只需要在方法上和启动类上添加注解即可
在这之前我们需要了解什么使cron表达式
通俗来说 就是设定一个时间 告诉程序 到这个时间后 就完成指定的方法体
cron 一共有六个参数 从左往右依次是 秒 分 时 日 月 周几 知道这个后我们就可以设置时间来完成事情
@Service
public class TaskService {
/*
cron表达式 一共六个参数
依次是 秒 分 时 日 月 周几
*/
@Scheduled(cron = "50 * 18 * * ?") // 这句话的意思就是 每天的18点 的每一分钟的第50s就输出下面这句话
public void hello(){
System.out.println("你被执行了plus");
}
}
@EnableScheduling
@SpringBootApplication
public class SpringbootTaskEmailApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootTaskEmailApplication.class, args);
}
}
然后测试运行