SpringBoot--中间件技术-1:任务管理,异步任务,任务调度,发邮件Mail的实现,含代码

SpringBoot中的事务管理

关键注解:

  1. 设置事务(声明事务管理),写在业务层的方法上:

    @Transactional(isolation = Isolation.DEFAULT)

    @Transactional(propagation = Propagation.REQUIRED)

  2. 开启事务,设置在启动类上:

    @EnableTransactionManagement

SpringBoot中的异步任务

在项目开发中,绝大多数情况下都是通过同步方式处理业务逻辑的,但是比如批量处理数据,批量发送邮件,批量发送短信等操作 容易造成阻塞的情况,之前大部分都是使用多线程来完成此类任务而在Spring 3+之后,就已经内置了**@Async**注解来完美解决这个问题,从而提高效率。

异步完成的业务尽量选用结果不影响主业务的

关键注解:

  1. @Async:标识的方法会异步执行
  2. @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 为我们提供了异步执行定时任务调度的方式

关键注解:

  1. @Scheduled标识的方法会进行定时处理

    需要通过 cron 属性来指定 cron 表达式:秒 分 时 日 月 星期 年

    在线生成cron表达式 http://cron.qqe2.com/

  2. @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

实现步骤:

  1. pom文件导入坐标

    xml 复制代码
    <!--mail坐标-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>

    如果下载不下来选择SpringBoot版本2.7.2

  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
  3. 编写代码(演示在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("[email protected]");    //填写发送的邮箱
            simpleMailMessage.setTo("[email protected]");		// 填写接受的邮箱
            //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("[email protected]");		//填写发送的邮箱
            mimeMessageHelper.setTo("[email protected]");	// 填写接受的邮箱
            //4.发送邮件
            javaMailSender.send(mimeMessage);
        }
    }
相关推荐
AronTing3 分钟前
05-Java 锁机制:synchronized、ReentrantLock 与 AQS 全解析
后端·面试
ChinaRainbowSea16 分钟前
9. RabbitMQ 消息队列幂等性,优先级队列,惰性队列的详细说明
java·javascript·分布式·后端·rabbitmq·ruby·java-rabbitmq
掉毛的小羊羔21 分钟前
🛸理解 MCP:工作原理、技术架构与 AI Agent 的关系全解析
前端·后端·架构
写bug写bug23 分钟前
掌握 HTTP 状态码
前端·后端·http
写bug写bug42 分钟前
图解六种常见负载均衡算法,一看就懂!
java·后端·负载均衡
追光的独行者44 分钟前
Springboot框架—单元测试操作
java·spring boot·单元测试
阿里云云原生1 小时前
Python3 AI 通义灵码 VSCode插件安装与功能详解
后端·python·visual studio code
瀚海澜生1 小时前
理解 Go 语言 panic 机制:错误类型、崩溃场景及修复
后端·面试
spe14371 小时前
【学习自用】配置文件中的配置项
java·spring boot·学习·mybatis
码农周1 小时前
springboot Filter实现请求响应全链路拦截!完整日志监控方案
java·spring boot·后端