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

SpringBoot中的事务管理

关键注解:

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

    @Transactional(isolation = Isolation.DEFAULT)

    @Transactional(propagation = Propagation.REQUIRED)

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

    @EnableTransactionManagement

SpringBoot中的异步任务

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

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

关键注解:

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

关键注解:

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

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

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

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

实现步骤:

  1. pom文件导入坐标

    <!--mail坐标-->
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    

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

  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
    
  3. 编写代码(演示在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);}
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/140709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

# Oracle 库常见问题排查

Oracle 库常见问题排查 文章目录 Oracle 库常见问题排查查询数据库的相关信息查看正在执行的语句杀掉正在执行的sql查看未提交的事务查看锁表 查询数据库的相关信息 查看正在执行的语句 SELECT s.sid, s.serial#, s.username, s.status, s.sql_id, s.sql_child_number, sq.sq…

React 共享组件状态及其实践

React 是一个强大的JavaScript库&#xff0c;它提供了一种简单的方式来构建用户界面。然而&#xff0c;随着应用规模的增长&#xff0c;状态管理成为一个复杂的问题。本篇文章将深入探讨如何在React组件之间共享状态。 状态提升 首先&#xff0c;我们来谈谈"状态提升&qu…

完全免费!超好用的IDEA插件推荐:Apipost-Helper

Idea 是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序,Idea 还具有许多插件和扩展&#xff0c;可以根据开发人员的需要进行定制和扩展&#xff0c;从而提高开发效率,今天我们就来介绍一款国产的…

使用Java实现一个简单的贪吃蛇小游戏

一. 准备工作 首先获取贪吃蛇小游戏所需要的头部、身体、食物以及贪吃蛇标题等图片。 然后&#xff0c;创建贪吃蛇游戏的Java项目命名为snake_game&#xff0c;并在这个项目里创建一个文件夹命名为images&#xff0c;将图片素材导入文件夹。 再在src文件下创建两个包&#xff0…

正点原子嵌入式linux驱动开发——Linux DAC驱动

上一篇笔记中学习了ADC驱动&#xff0c;STM32MP157 也有DAC外设&#xff0c;DAC也使用的IIO驱动框架。本章就来学习一下如下在Linux下使用STM32MP157上的DAC。 DAC简介 ADC是模数转换器&#xff0c;负责将外界的模拟信号转换为数字信号。DAC刚好相反&#xff0c;是数模转换器…

在node中实现高效率、低内存的excel/JSON转换

在node中实现高效率、低内存的excel/JSON转换 在nodejs中不使用过多内存的情况下&#xff0c;将大型excel文件转换为json格式是一个非常常见的需求&#xff0c;因为它可以更容易地处理和共享数据。在这篇文章中&#xff0c;我们将探讨如何完成这个需求&#xff0c;提供一个逐步…

Mac电脑Visio文件编辑查看软件推荐Visio Viewer for Mac

mac版Visio Viewer功能特色 在Mac OS X上查看Visio绘图和图表 在Mac OS X上轻松查看MS Visio文件 在Mac上快速方便地打开并阅读Visio文件&#xff08;.vsd&#xff0c;.vsdx&#xff09;。 支持通过放大&#xff0c;缩小&#xff0c;旋转&#xff0c;文本选择和复制&#xff0…

群晖Docker(Container Manager)中安装Home Assistant Container

群晖Docker&#xff08;Container Manager&#xff09;中安装Home Assistant Container 不要使用 套件里面的 Home Assistant&#xff0c;不利于后期拓展 方式一&#xff1a; docker run -d --name"home-assistant-1" -v /volume1/docker/homeassistant/config:/c…

秋招求职经验分享

0.个人简介 2023年10月底&#xff0c;最终拿到了海康威视、汇川技术等十余家公司的Offer&#xff0c;最终签了自己心仪的Offer&#xff0c;秋招对我来说算是正式结束了&#xff0c;写个博客纪念一下&#xff0c;顺便分享以下秋招的经验&#xff0c;为后来人求职提供一些参考。…

华东“启明”青少年音乐艺术实践中心揭幕暨中国“启明”巴洛克合奏团首演音乐会

2023年11月11日&#xff0c;华东“启明”青少年音乐艺术实践中心在上海揭幕&#xff0c;中国“启明”巴洛克合奏团开启了首场音乐会。 华东“启明”青少年音乐艺术实践中心由中共宁波市江北区委宣传部与上音管风琴艺术中心联合指导&#xff0c;宁波音乐港、宁波市江北区洛奇音乐…

Apache APISIX 的 Admin API 默认访问令牌漏洞(CVE-2020-13945)漏洞复现

漏洞描述 Apache APISIX 是一个动态、实时、高性能的 API 网关。Apache APISIX 有一个默认的内置 API 令牌&#xff0c;可用于访问所有 admin API&#xff0c;通过 2.x 版本中添加的参数导致远程执行 LUA 代码。 漏洞环境及利用 启动docker环境 访问9080端口 通过 admin api…

利用LangChain实现RAG

检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;结合了搜寻检索生成能力和自然语言处理架构&#xff0c;透过这个架构&#xff0c;模型可以从外部知识库搜寻相关信息&#xff0c;然后使用这些信息来生成response。要完成检索增强生成主要包含四个步骤…

Java进阶(垃圾回收GC)——理论篇:JVM内存模型 垃圾回收定位清除算法 JVM中的垃圾回收器

前言 JVM作为Java进阶的知识&#xff0c;是需要Java程序员不断深度和理解的。 本篇博客介绍JVM的内存模型&#xff0c;对比了1.7和1.8的内存模型的变化&#xff1b;介绍了垃圾回收的语言发展&#xff1b;阐述了定位垃圾的方法&#xff0c;引用计数法和可达性分析发以及垃圾清…

GetPrivateProfileSection使用

基本语法 GetPrivateProfileSection 是一个 Windows API 函数&#xff0c;用于检索指定 INI 文件中特定节的所有键值对。它可以读取INI文件中指定节所有的键值对并将结果存储在指定的缓冲区中。 以下是 GetPrivateProfileSection 函数的基本语法&#xff1a; DWORD GetPriva…

如何实现Debian工控电脑USB接口安全管控

Debian 作为工控电脑操作系统具有稳定性、安全性、自定义性和丰富的软件包等优势&#xff0c;适用于要求高度可靠性和安全性的工控应用。 Debian 作为工控电脑操作系统在工业控制领域有很大优势&#xff0c;包括&#xff1a; 稳定性&#xff1a;Debian 的发布版以其稳定性而闻…

find和grep命令的简单使用

find和grep命令的简单使用 一、find例子--不同条件查找 二、grep正则表达式的简单说明例子--简单文本查找例子--结合管道进行查找 一、find find 命令在指定的目录下查找对应的文件。 find [path] [expression]● path 是要查找的目录路径&#xff0c;可以是一个目录或文件名…

MS321V/358V/324V低压、轨到轨输入输出运放

MS321V/MS358V/MS324V 是单个、两个和四个低压轨到轨输 入输出运放&#xff0c;可工作在幅度为 2.7V 到 5V 的单电源或者双电源条件 下。在低电源、空间节省和低成本应用方面是最有效的解决方案。 这些放大器专门设计为低压工作&#xff08; 2.7V 到 5V &#xff09;…

Electron-vue出现GET http://localhost:9080/__webpack_hmr net::ERR_ABORTED解决方案

GET http://localhost:9080/__webpack_hmr net::ERR_ABORTED解决方案 使用版本解决方案解决总结 使用版本 以下是我解决此问题时使用的electron和vue等的一些版本信息 【附】经过测试 electron 的版本为 13.1.4 时也能解决 解决方案 将项目下的 .electron-vue/dev-runner.js…

为什么要用“交叉熵”做损失函数

大家好啊&#xff0c;我是董董灿。 今天看一个在深度学习中很枯燥但很重要的概念——交叉熵损失函数。 作为一种损失函数&#xff0c;它的重要作用便是可以将“预测值”和“真实值(标签)”进行对比&#xff0c;从而输出 loss 值&#xff0c;直到 loss 值收敛&#xff0c;可以…

相对路径和绝对路径

来源 绝对路径&#xff0c;从根目录为起点到某一个目录的路径&#xff1b; 相对路径&#xff0c;从一个目录为起点到另外一个的目录的路径。 例如&#xff1a; ┍ A文件夹 C -| ┕ B文件夹 绝对路径&#xff1a; C:\A文件夹 相对路径&#xff08;如果你在A文件夹时&#xf…