SpringBoot中的事务管理
关键注解:
-
设置事务(声明事务管理),写在业务层的方法上:
@Transactional(isolation = Isolation.DEFAULT)
@Transactional(propagation = Propagation.REQUIRED)
-
开启事务,设置在启动类上:
@EnableTransactionManagement
SpringBoot中的异步任务
在项目开发中,绝大多数情况下都是通过同步方式处理业务逻辑的,但是比如批量处理数据,批量发送邮件,批量发送短信等操作 容易造成阻塞的情况,之前大部分都是使用多线程来完成此类任务而在Spring 3+之后,就已经内置了**@Async**注解来完美解决这个问题,从而提高效率。
异步完成的业务尽量选用结果不影响主业务的
关键注解:
- @Async:标识的方法会异步执行
- @EnableAsync:启动类上开启基于注解的异步任务
演示:
控制器:
java
@RestController
public class UserController {
@Autowired
IService service;
@RequestMapping("/show")
public String show(){
service.add();
return "success";
}
}
业务Service:
java
@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之后三秒钟,控制台会打印内容==》批量新增
SpringBoot中的任务调度
在项目开发中,经常需要执行一些定时任务,比如 每月1号凌晨需要汇总上个月的数据分析报表; 每天凌晨分析前一天的日志信息等定时操作。Spring 为我们提供了异步执行定时任务调度的方式
关键注解:
-
@Scheduled标识的方法会进行定时处理
需要通过 cron 属性来指定 cron 表达式:秒 分 时 日 月 星期 年
在线生成cron表达式 http://cron.qqe2.com/
-
@EnableScheduling启动类上开启基于注解的定时任务
实现演示:
调度的任务:
java
@Component
public class Myjob {
//秒 分 时 日 月 星期 年
@Scheduled(cron = "* 39 16 * * *")
public void show(){
System.out.println("詹姆斯高斯林是厉害,但他进不了谷歌");
}
}
在下午cron表达式含义:16:39分的每一秒调度一次
启动类:
添加注释@EnableScheduling
java
@SpringBootApplication
@EnableScheduling
public class Springboot03CenterJobApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot03CenterJobApplication.class, args);
}
}
SpringBoot整合Mail
实现步骤:
-
pom文件导入坐标
xml<!--mail坐标--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
如果下载不下来选择SpringBoot版本2.7.2
-
yaml文件配置
yaml# 配置发送邮箱 spring: mail: username: 13050377215 password: BVIPJEIUPEKLSPFZ # 这里的密码是邮箱的串码 host: smtp.163.com
properties的配置如下
properties#配置邮箱信息 spring.mail.username= spring.mail.password= #发送邮件服务器 spring.mail.host=smtp.qq.com #ssl连接 spring.mail.properties.smtp.ssl.enable=true
-
编写代码(演示在juint单元测试编写)
java@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("但是,<span style='color:red'>高斯林再牛逼,他也进不了谷歌</span>",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); } }