关键注解:
设置事务(声明事务管理),写在业务层的方法上:
@Transactional(isolation = Isolation.DEFAULT)
@Transactional(propagation = Propagation.REQUIRED)
开启事务,设置在启动类上:
@EnableTransactionManagement
在项目开发中,绝大多数情况下都是通过同步方式处理业务逻辑的,但是比如批量处理数据,批量发送邮件,批量发送短信等操作 容易造成阻塞的情况,之前大部分都是使用多线程来完成此类任务而在Spring 3+之后,就已经内置了**@Async**注解来完美解决这个问题,从而提高效率。
异步完成的业务尽量选用结果不影响主业务的
关键注解:
演示:
控制器:
@RestController
public class UserController {
@Autowired
IService service;
@RequestMapping("/show")
public String show(){
service.add();
return "success";
}
}
业务Service:
@Service
public class ServiceImp implements IService {
@Override
@Async
public void add() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("==》批量新增");
}
}
业务的add方法被@Async声明为异步任务,访问localhost:8080/show之后三秒钟,控制台会打印内容==》批量新增
在项目开发中,经常需要执行一些定时任务,比如 每月1号凌晨需要汇总上个月的数据分析报表; 每天凌晨分析前一天的日志信息等定时操作。Spring 为我们提供了异步执行定时任务调度的方式
关键注解:
@Scheduled标识的方法会进行定时处理
需要通过 cron 属性来指定 cron 表达式:秒 分 时 日 月 星期 年
在线生成cron表达式 http://cron.qqe2.com/
@EnableScheduling启动类上开启基于注解的定时任务
实现演示:
调度的任务:
@Component
public class Myjob {
//秒 分 时 日 月 星期 年
@Scheduled(cron = "* 39 16 * * *")
public void show(){
System.out.println("詹姆斯高斯林是厉害,但他进不了谷歌");
}
}
在下午cron表达式含义:16:39分的每一秒调度一次
启动类:
添加注释@EnableScheduling
@SpringBootApplication
@EnableScheduling
public class Springboot03CenterJobApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot03CenterJobApplication.class, args);
}
}
实现步骤:
pom文件导入坐标
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-mailartifactId>
dependency>
如果下载不下来选择SpringBoot版本2.7.2
yaml文件配置
# 配置发送邮箱
spring:
mail:
username: 130********** # (邮箱账号,假如邮箱号是111@163.com,这里仅写111)
password: B**************Z # 这里的密码是邮箱的串码
host: smtp.163.com
properties的配置如下
#配置邮箱信息
spring.mail.username=
spring.mail.password=
#发送邮件服务器
spring.mail.host=smtp.qq.com
#ssl连接
spring.mail.properties.smtp.ssl.enable=true
编写代码(演示在juint单元测试编写)
@SpringBootTest
class Springboot04CenterMailApplicationTests {
@Autowired(required = false)
private JavaMailSenderImpl javaMailSender;
// 简单邮件
@Test
void show1() {
//1.创建邮件对象
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
//2.设置信息
simpleMailMessage.setSubject("坚持自己,你就是下一个詹姆斯高斯林");
simpleMailMessage.setText("但是,高斯林再牛逼,他也进不了谷歌");
simpleMailMessage.setFrom("xxx@163.com"); //填写发送的邮箱
simpleMailMessage.setTo("xxx@qq.com"); // 填写接受的邮箱
//3.发送邮件
javaMailSender.send(simpleMailMessage);
System.out.println("发送成功~~~");
}
// 复杂邮件(发送的邮件带有样式,还能附加文件)
@Test
void show2() throws Exception{
//1.创建邮件对象
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
//2.创建MimeMessageHelper
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
//3.设置信息
mimeMessageHelper.setSubject("坚持自己,你就是下一个高斯林");
mimeMessageHelper.setText("但是,高斯林再牛逼,他也进不了谷歌",true);
mimeMessageHelper.addAttachment("表情包.jpg",new File("C:\\Users\\ASUS\\Pictures\\表情包.jpg"));
mimeMessageHelper.setFrom("xxx@163.com"); //填写发送的邮箱
mimeMessageHelper.setTo("xxx@qq.com"); // 填写接受的邮箱
//4.发送邮件
javaMailSender.send(mimeMessage);
}
}