SpringBoot中的事务管理
关键注解:
-
设置事务(声明事务管理),写在业务层的方法上:
@Transactional(isolation = Isolation.DEFAULT)
@Transactional(propagation = Propagation.REQUIRED)
-
开启事务,设置在启动类上:
@EnableTransactionManagement
SpringBoot中的异步任务
在项目开发中,绝大多数情况下都是通过同步方式处理业务逻辑的,但是比如批量处理数据,批量发送邮件,批量发送短信等操作 容易造成阻塞的情况,之前大部分都是使用多线程来完成此类任务而在Spring 3+之后,就已经内置了**@Async**注解来完美解决这个问题,从而提高效率。
异步完成的业务尽量选用结果不影响主业务的
关键注解:
- @Async:标识的方法会异步执行
- @EnableAsync:启动类上开启基于注解的异步任务
演示:
控制器:
@RestController
public class UserController {@AutowiredIService service;@RequestMapping("/show")public String show(){service.add();return "success";}
}
业务Service:
@Service
public class ServiceImp implements IService {@Override@Asyncpublic 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启动类上开启基于注解的定时任务
实现演示:
调度的任务:
@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);}}
SpringBoot整合Mail
实现步骤:
-
pom文件导入坐标
<!--mail坐标--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId> </dependency>
如果下载不下来选择SpringBoot版本2.7.2
-
yaml文件配置
# 配置发送邮箱 spring:mail:username: 13050377215password: BVIPJEIUPEKLSPFZ # 这里的密码是邮箱的串码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;// 简单邮件@Testvoid 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("发送成功~~~");}// 复杂邮件(发送的邮件带有样式,还能附加文件)@Testvoid show2() throws Exception{//1.创建邮件对象MimeMessage mimeMessage = javaMailSender.createMimeMessage();//2.创建MimeMessageHelperMimeMessageHelper 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);} }