SpringBoot(事务管理,异步任务,任务调度,整合Mail)

spring自身就集成了许多中间件,可以帮助我们进行日常的开发。

一:Spring Boot中的事务管理

spring事务管理有两种方式

编程式:

即:使用AOP中的切点,切面的知识,利用代理模式对事务进行管理,即AOP在事务方面的应用,具体代码如下:

    public Object AroundLogger(ProceedingJoinPoint pjp){Object returnobj = null;//保存主业务方法的返回值try{//1.前置通知System.out.println("环绕通知===》前置通知");Object[] objs = pjp.getArgs();//主业务方法的参数returnobj =  pjp.proceed(objs);//调用主业务方法//3.后置通知System.out.println("环绕通知===》返回通知");}catch (Throwable tw){//4.异常通知System.out.println("环绕通知===》异常通知");}finally{//5.最终通知System.out.println("环绕通知===》后置通知");}return returnobj;}

声明式:

相比编程式简单得多,是Spring Boot已经封装好的。

//设置事务,在需要进行声明的类或方法上进行添加,@Transactional
@Transactional(isolation = Isolation.DEFAULT)
@Transactional(propagation = Propagation.REQUIRED)
//开启事务,在启动类上添加
@EnableTransactionManagement

二:Spring Boot中异步任务

像发送短信等业务,由于发送短信比较慢,所以可以提前将成功消息返回,就像直接跳转到登录界面等待输入验证码,但实际验证码还有3,4秒才会发送到,甚至可能发送失败。

这种一步处理的方式只适合那种不影响主业务功能的部分使用,因为如果处理失败也不会影响主业务。

@EnableAsync 启动类上开启基于注解的异步任务
@Async 标识的方法会异步执行

三:定时任务调度

在项目开发中,经常需要执行一些定时任务,比如 每月1号凌晨需要汇总上个月的数据分析报表; 每天 凌晨分析前一天的日志信息等定时操作。Spring 为我们提供了异步执行定时任务调度的方式

@EnableScheduling启动类上开启基于注解的定时任务
@Scheduled标识的方法会进行定时处理
//需要通过 cron 属性来指定 cron 表达式:秒 分 时 日 月 星期 年
//在线生成cron表达式 http://cron.qqe2.com/

四:Spring整合Mail

导入坐标

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

开启配置

#配置邮箱信息
spring.mail.username=spring.mail.password=#发送邮件服务器
spring.mail.host=smtp.qq.com#ssl连接
spring.mail.properties.smtp.ssl.enable=true

编写代码

//邮件收发核心类
JavaMailSenderImpl javaMailSender;//封装简单的邮件内容
SimpleMailMessage//封装复杂的邮件(携带附件)
MimeMessageMimeMessageHelper

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

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

相关文章

【面试】如果一个NPM包部分功能不满足需求,怎么办

在处理第三方npm包不满足特定需求时&#xff0c;有几种推荐的处理方法。直接修改node_modules中的代码虽然可行&#xff0c;但不推荐&#xff0c;因为这些改动在执行npm install或更新包时会丢失。以下是几种推荐的处理方法&#xff1a; 使用Fork 最常见的方式是Fork源代码。…

「运费速查神器」精明买家必备!一键查询1688供应商发货费用

对于从事跨境买家还是国内电商买家&#xff0c;在选品时&#xff0c;需要全面考虑商品成本&#xff0c;发货费用是供应链成本的重要组成部分。 原来如果我们在1688选品看供应商发货运费&#xff0c;需要一个个单独点击到商品的详情页去查看&#xff0c;再选择具体的收货地、再…

Elastic:监控不同于可观察性的 3 个原因

作者&#xff1a;来自 Elastic Observability Team 监控和可观察性经常互换使用&#xff0c;但它们并不完全相同。监控是可观察性的重要组成部分&#xff0c;但可观察性远远超出了传统监控实践的范围。 关键区别&#xff1a;监控从各个组件收集数据 —— 何时和什么&#xff0…

C/C++文件操作类实现

C文件操作类的实现与应用 在C编程中&#xff0c;文件操作是一项非常重要的任务。本文将介绍一个名为FileOperation的类&#xff0c;它提供了一系列用于文件和文件夹操作的方法&#xff0c;包括遍历文件夹、删除文件、获取指定文件、获取指定后缀的文件、复制文件、移动文件、重…

微信小程序-CANVAS写入图片素材、文字等数据生成图片

微信小程序中&#xff0c;CANVAS写入图片素材、文字等数据生成图片&#xff0c;最终可将生成的 base64 格式图片保存至相册操作 Tips&#xff1a; 1、canvas 标签默认宽度 300px、高度 150px canvas 生成图片时&#xff0c;写入图片素材、文字等数据前&#xff0c;需要根据实…

叶再豪降龙精英课程总结

文章目录 1.思维认知1.1 稻盛和夫成功公式1.2 龙头主升模式1.3 龙头主升-两种路径1.4 股市新手的炒股思路1.5 龙头案例1.6 降龙心法 2.情绪周期2.1 情绪周期2.1 情绪演绎周期2.2 情绪的四个部分2.2.1 指数的情绪周期2.2.3 热点情绪周期2.2.4 热点情绪演绎周期2.2.5 大热点支线2…

1.Vue基础(@事件名+v-show+created+v-bind)

Vue基础 文章目录 Vue基础一.Vue简介1.定义&#xff1a;2.特点&#xff1a;3.建立vue程序步骤 二.Vue的常用指令1.v-text和v-html2.v-show和v-if显示和隐藏数据3.v-on和事件名触发事件4.v-bind设置元素属性5.created页面加载运行的代码块6.v-for7.v-model双向绑定 一.Vue简介 …

深入了解路由器工作原理:从零开始的简单讲解

简介 在现代网络中&#xff0c;路由器扮演着至关重要的角色。它不仅连接了不同的设备&#xff0c;还确保数据能够准确地传输到目的地。本文将带你深入探讨路由器的工作原理&#xff0c;帮助网络基础小白们理解这一重要设备的基本功能。 路由器的构成 路由器是一种具有多个输入…

鸿蒙上的“adb“即hdc常用命令

hdc&#xff08;HarmonyOS Device Connector&#xff09;是为开发人员提供的用于调试的命令行工具&#xff0c;通过该工具可以在windows/linux/mac系统上与真实设备进行交互。 环境准备 hdc工具通过HarmonyOS SDK获取&#xff0c;存放于SDK的toolchains目录下&#xff0c;首次…

纷享AI | AI技术在销售场景的应用与实践

AI高速发展的今天&#xff0c;各行业都经历着深刻变革。但机遇与挑战总相伴相生&#xff0c;各企业负责人事实上也正面临着如何有效利用AI以完成赋能销售业务的难题。 毋庸置疑&#xff0c;跟上技术潮流&#xff0c;通过落实AI在销售场景中的应用进而取得卓越赋能成果必然是行…

Android TabLayout的简单用法

TabLayout 注意这里添加tab&#xff0c;使用binding.tabLayout.newTab()进行创建 private fun initTabs() {val tab binding.tabLayout.newTab()tab.text "模板库"binding.tabLayout.addTab(tab)binding.tabLayout.addOnTabSelectedListener(object : TabLayout.On…

深度学习系列一

激活函数 sigmod 梯度消失问题&#xff1a; sigmoid函数的导数在输入值较大或较小时接近于0。在反向传播过程中&#xff0c;这些小梯度会相乘&#xff0c;导致深层网络的梯度变得非常小。结果是&#xff0c;深层网络的参数几乎不会更新&#xff0c;训练变得非常困难。这就是为…

Passing output of 3DCNN layer to LSTM layer

题意&#xff1a;将3DCNN&#xff08;三维卷积神经网络&#xff09;层的输出传递给LSTM&#xff08;长短期记忆网络&#xff09;层 问题背景&#xff1a; Whilst trying to learn Recurrent Neural Networks(RNNs) am trying to train an Automatic Lip Reading Model using 3…

2024年上半年主要游戏安全风险,该如何应对?

随着游戏行业的蓬勃发展&#xff0c;安全问题也日益成为行业关注的焦点。面对 2024 年上半 年的游戏安全风险挑战&#xff0c;游戏行业需要不断加强技术能力&#xff0c;完善安全策略&#xff0c;与各方共 同努力&#xff0c;打造一个更加安全、公平的游戏环境。 游戏安全解…

Saga模式在分布式事务中的应用

在分布式系统中&#xff0c;事务管理是一个复杂且关键的问题。传统的ACID事务模型在单体应用中表现良好&#xff0c;但在分布式环境中&#xff0c;由于网络延迟、服务故障等因素&#xff0c;实现强一致性的事务变得非常困难。Saga模式作为一种分布式事务解决方案&#xff0c;通…

前端程序员会演化出类TA岗位吗?

前端开发领域确实在不断演化&#xff0c;随着技术的进步和行业的需求变化&#xff0c;前端程序员的角色和职责也在拓展&#xff0c;这自然催生了一系列相关的专业岗位。以下是一些从前端开发领域分化出来的专业角色&#xff0c;我们可以称之为“类TA”&#xff08;Technical Ad…

BGP之选路MED

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时&#xff0c;BGP协议会对这些BGP路由的属性进行比较&#xff0c;以确定去往该目标网络的最优BGP路由。BGP路由属性的比较顺序为Preferred Value属性、Local Preference属性、路由生成方式、AS_Path属性、Origin属…

学习记录——day18 数据结构 树

树的存储 1、顺序存储 对于普通的二叉树&#xff0c;不适合存储普通的二叉树顶序存储&#xff0c;一般用于存储完全二叉树而言&#xff0c;如果使用顺序存储&#xff0c;会浪费大量的存储空间&#xff0c;因为需要给没有节点的位置留出空间&#xff0c;以便于后期的插入。 所以…

20分钟上手新版Skywalking 9.x APM监控系统

Skywalking https://skywalking.apache.org/ Skywalking是专为微服务、云原生和基于容器的&#xff08;Kubernetes&#xff09;架构设计的分布式系统性能监控工具。 Skywalking关键特性 ● 分布式跟踪 ○ 端到端分布式跟踪。服务拓扑分析、以服务为中心的可观察性和API仪表板。…

兼容浏览器,切换PC端显示PC端,切换H5端显示H5端

兼容浏览器&#xff0c;切换PC端显示PC端&#xff0c;切换H5端显示H5端 Uniapp vue3 Uview 项目 Vue3 Vite Ts ElementPlus PC端 &#xff08;在浏览器PC端&#xff0c;切换H5端兼容显示H5端页面&#xff09; 浏览器H5端 (在浏览器H5端&#xff0c;切换PC端兼容显示PC端…