当前位置: 首页 > news >正文

网站建其他知识/seo关键词分析

网站建其他知识,seo关键词分析,网站设计公司那个好,九江做网站文章目录 1.几种常用的事务传播行为1.1 REQUIRED1.2 REQUIRES_NEW1.2 NESTED 2. 事务问题2.1 事务不生效?2.2 事务不回滚? 文章会分为两个部分来讲解,第一部分是声明式事务的几种使用场景。第二部分包含事务没有生效,没有回滚的情…

文章目录

  • 1.几种常用的事务传播行为
    • 1.1 REQUIRED
    • 1.2 REQUIRES_NEW
    • 1.2 NESTED
  • 2. 事务问题
    • 2.1 事务不生效?
    • 2.2 事务不回滚?

文章会分为两个部分来讲解,第一部分是声明式事务的几种使用场景。第二部分包含事务没有生效,没有回滚的情况。

1.几种常用的事务传播行为

在实际的应用开发中,有几种事务传播行为比较常用,主要包括以下几种:

  1. REQUIRED (默认行为): 这是最常用的传播行为。如果当前没有事务,就新建一个事务;如果已经存在事务,就加入这个事务。适用于大多数需要事务管理的场景,如任何需要保持数据完整性和一致性的操作。

  2. REQUIRES_NEW: 始终启动一个新的事务。如果一个事务已经存在,则先将这个存在的事务挂起。这个传播行为适用于需要完全独立于当前事务上下文执行的操作,例如日志记录,这些操作不应该被外部事务的影响而回滚。

  3. NESTED: 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则其行为与REQUIRED一样。嵌套事务是一个子事务,它依赖于父事务。父事务失败时,子事务会被回滚。子事务失败,父事务可以决定是回滚还是继续执行。这适用于需要执行一系列操作,其中一些操作可能需要独立于其它操作回滚的场景。

  4. SUPPORTS: 如果当前存在事务,则加入事务;如果当前没有事务,则以非事务方式执行。这适用于不需要事务管理的读操作,但如果操作在事务环境中被调用,则能够参与到事务中。

  5. NOT_SUPPORTED: 总是非事务地执行,并且挂起任何存在的事务。适用于不应该在事务环境中运行的长时间运行的操作。

但我个人认为前三种很好用,后面两种则看情况了,我没讲到的我认为用处不大,可以忽略。

1.1 REQUIRED

默认的传播行为就是没有就新建,否则就加入当前事务,一般在在方法上加@Transactional即可,(因为很简单就不放代码了,后续会放上代码)但注意该方法要被public修饰,否则事务不会生效,这个后面会细讲。

1.2 REQUIRES_NEW

我认为这个注解对于方法执行中加日志记录很有用,因为不管方法成功或者失败,我们都想记录下是哪里出了问题,此时就可以用到这个注解,点示例如下。

@Service
public class OrderService {@Autowiredprivate LogService logService;@Transactionalpublic void processOrder(Order order) {try {// ... 订单处理逻辑 ...// 模拟可能出现的异常if (someCondition) {throw new RuntimeException("订单处理出现异常");}// ... 更多订单处理逻辑 ...} catch (Exception e) {// 记录日志(即使主事务失败,日志事务仍然可以提交)logService.recordLog(order, e.getMessage());throw e; // 重新抛出异常以确保主事务可以回滚}}
}@Service
public class LogService {@Autowiredprivate LogRepository logRepository;@Transactional(propagation = Propagation.REQUIRES_NEW)public void recordLog(Order order, String message) {LogEntry logEntry = new LogEntry();logEntry.setOrderId(order.getId());logEntry.setMessage(message);logEntry.setTimestamp(new Date());logRepository.save(logEntry); // 保存日志到数据库}
}

1.2 NESTED

这个注解提供了更完备的事务控制,试想这么一个场景,我的父方法需要被事务控制,子方法中出现了异常我也不回滚,但如果父方法中出现了异常,则全部事务回滚。

好好思考下这个场景,使用新建事务就做不到了,因为那已经是两个事务了,而嵌套事务则代表两个事务有关联,但子事务的优先级很低,以父方法中的代码为准,代码如下。

注意,我使用了noRollbackFor = InventoryException.class ,这将导致出现该异常,会往上抛,但是不回滚。

@Service
public class OrderService {@Autowiredprivate InventoryService inventoryService;@Transactional(rollbackFor=Exception.class)public void processOrder(Order order) {try {// ... 订单处理逻辑 ...// 调用扣减库存方法,该方法在自己的嵌套事务中执行inventoryService.deductInventory(order);// ... 更多订单处理逻辑 ...// 模拟可能出现的异常if (someCondition) {throw new RuntimeException("订单处理出现异常");}} catch (Exception e) {// 处理异常,父事务中的异常会导致整个事务(包括嵌套事务)回滚throw e;}}
}@Service
public class InventoryService {@Transactional(propagation = Propagation.NESTED, noRollbackFor = InventoryException.class)public void deductInventory(Order order) {// ... 库存扣减逻辑 ...// 如果出现特定条件,抛出自定义异常,这将只回滚当前嵌套事务if (someCondition) {throw new InventoryException("库存不足");}// ... 更多库存处理逻辑 ...}
}

2. 事务问题

2.1 事务不生效?

  • public 方法:通常,只有标注在 public 方法上的 @Transactional 才会被
  • Spring AOP代理捕获,因此才会生效。
    外部调用:Spring AOP基于代理模式,只有通过代理对象的外部调用方法时,事务才会被触发。如果在同一类中使用this关键字调用另一个方法(即使它被@Transactional注解),事务是不会被触发的。

所以只要满足了这两个条件,事务就一定会生效了。

2.2 事务不回滚?

  • 异常的传播:只有当异常从标注了@Transactional的方法中抛出时,事务才会回滚。如果在方法内部通过try-catch块捕获了异常并处理了,那么事务不会自动回滚。
  • 手动回滚:如果需要在catch块中回滚事务,可以通过调用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()手动标记事务回滚。
  • 运行时异常和错误:默认情况下,Spring只会在出现运行时异常(RuntimeException)或错误(Error)时回滚事务。
    所有异常回滚:如果需要让事务在检查型异常(即非运行时异常)抛出时也回滚,可以在@Transactional注解中设置rollbackFor = Exception.class

以上就是我总结的事务内容,如果有什么错误,欢迎指正。

知识点是没有用的,体系是有用的,我们需要的是体系。

相关文章:

Java声明式事务实战!工作中用这几种就够了!

文章目录 1.几种常用的事务传播行为1.1 REQUIRED1.2 REQUIRES_NEW1.2 NESTED 2. 事务问题2.1 事务不生效?2.2 事务不回滚? 文章会分为两个部分来讲解,第一部分是声明式事务的几种使用场景。第二部分包含事务没有生效,没有回滚的情…...

Abp6.0 使用 appsettings.json配置Serilog.Sinks.MariaDB

Abp6.0中已经启用Serilog,使用Serilog.Sinks.MariaDB包可以保存到MariaDB,mysql中 一种做法是在var loggerConfiguration new LoggerConfiguration( )后使用WriteTo.MariaDB扩展方法来配置,这样在代码中配置不够灵活,修改起来也不方便 其实…...

关于Flume-Kafka-Flume的模式进行数据采集操作

测试是否连接成功: 在主节点flume目录下输入命令: bin/flume-ng agent -n a1 -c conf/ -f job/file_to_kafka.conf -Dflume.root.loggerinfo,console # 这个file_to_kafka.conf文件就是我们的配置文件 然后在另一台节点输入命令进行消费数据: kafka-cons…...

WeTab--颜值与实力并存的浏览器插件

一.前言 现在的浏览器花花绿绿,有大量的广告与信息,令人目不暇接。有没有一款好用的浏览器插件可以解决这个问题呢?我愿称WeTab为版本答案。 WeTab的界面: 干净又整洁。最最关键的是还有智能AI供你服务。 这个WeTabAI就像chatgp…...

2023/11/15JAVA学习(线程池,Executors,网络编程,InetAddress,UDP,TCP,DatagramSocket)

如何多开一个程序...

【整理】HTTP相关版本对比

1. HTTP/1 超文本传输协议,处于计算机网络中的应用层,HTTP是建立在TCP协议之上,所以HTTP协议的瓶颈及其优化技巧都是基于TCP协议本身的特性。 缺陷: 连接无法复用 ---------- 每次请求经历三次握手和慢启动HOLB(队头…...

spark性能调优 | 默认并行度

Spark Sql默认并行度 看官网,默认并行度200 https://spark.apache.org/docs/2.4.5/sql-performance-tuning.html#other-configuration-options 优化 在数仓中 task最好是cpu的两倍或者3倍(最好是倍数,不要使基数) 拓展 在本地 task需要自己设置&a…...

Python-pptx教程之二操作已有PPT模板文件

文章目录 简单的案例找到要修改的元素修改幻灯片中的文本代码使用示例 修改幻灯片的图片代码使用示例 删除幻灯片代码使用示例 获取PPT中所有的文本内容获取PPT中所有的图片总结 在上一篇中我们已经学会了如何从零开始生成PPT文件,从零开始生成较为复杂的PPT是非常消…...

生活总是自己的,请尽情打扮,尽情可爱,,

同色系拼接羽绒服了解一下 穿上时尚感一下子就突显出来了 90白鸭绒填充,不仅时尚还保暖 设计感满满的羽绒服不考虑一下吗?...

栈和队列的初始化,插入,删除,销毁。

目录 题外话 顺序表和链表优缺点以及特点 一.栈的特点 二. 栈的操作 2.1初始化 2.2 栈的销毁 2.3 栈的插入 2.3 输出top 2.4 栈的删除 2.5 输出栈 题外话 顺序表和链表优缺点以及特点 特点:顺序表,逻辑地址物理地址。可以任意访问&#xff0c…...

重温《Unix设计哲学》

重温Unix设计哲学 这个世界是复杂的,但往往本质的东西都是简单的。这些原则,不光是用在程序开发,也适用于架构设计,产品设计等等地方。 简洁原则:以简洁为美 不要为了满足自己的虚荣心,企图搞一些花哨的东…...

AIGC创作系统ChatGPT源码,AI绘画源码,支持最新GPT-4-Turbo模型,支持DALL-E3文生图

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…...

Spring条件注解@Conditoinal+ Profile环境切换应用@Profile

Spring条件注解 一、创建一个maven项目 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.5.RELEASE</version></dependency> </dependenc…...

Scrum框架中的Sprint

上图就是sprint里要做的事。Sprint是scrum框架的核心&#xff0c;是所有的想法、主意转换为价值的地方。所有实现产品目标的必要工作都在sprint里完成&#xff0c;这些工作主要包括Sprint 计划&#xff08;Sprint planning&#xff09;、每日站会&#xff08;Daily Scrum&#…...

openfeign、nacos获取接口提供方真实IP

源码分析 client 是 LoadBalancerFeignClient org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient#execute public Response execute(Request request, Request.Options options) throws IOException {try {URI asUri URI.create(request.url());String c…...

Linux系统编程学习 NO.9——git、gdb

前言 本篇文章简单介绍了Linux操作系统中两个实用的开发工具git版本控制器和gdb调试器。 git 什么是git&#xff1f; git是一款开源的分布式版本控制软件。它不仅具有网络功能&#xff0c;还是服务端与客户端一体的软件。它可以高效的处理程序项目中的版本管理。它是Linux内…...

【联邦学习+区块链】TORR: A Lightweight Blockchain for Decentralized Federated Learning

文章目录 I.CONTRIBUTIONII. ASSUMPTIONS AND THREAT MODELA. AssumptionsB. Threat Model III. SYSTEM DESIGNA. Design OverviewB. Block DesignC. InitializationD. Role SelectionE. Storage ProtocolF. Aggregation ProtocolG. Proof of ReliabilityH. Blockchain Consens…...

《网络协议》08. 概念补充

title: 《网络协议》08. 概念补充 date: 2022-10-06 18:33:04 updated: 2023-11-17 10:35:52 categories: 学习记录&#xff1a;网络协议 excerpt: 代理、VPN、CDN、网络爬虫、无线网络、缓存、Cookie & Session、RESTful。 comments: false tags: top_image: /images/back…...

利用NVIDIA DALI读取视频帧

1. NVIDIA DALI简介 NVIDIA DALI全称是NVIDIA Data Loading Library&#xff0c;是一个用GPU加速的数据加载和预处理库&#xff0c;可用于图像、视频和语音数据的加载和处理&#xff0c;从而为深度学习的训练和推理加速。 NVIDIA DALI库的出发点是&#xff0c;深度学习应用中…...

TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

【算法每日一练]-图论(保姆级教程 篇5(LCA,最短路,分层图)) #LCA #最短路计数 #社交网络 #飞行路线 # 第二短路

今天讲最短路统计和分层图 目录 题目&#xff1a;LCA 思路&#xff1a; 题目&#xff1a;最短路计数 思路&#xff1a; 题目&#xff1a;社交网络 思路&#xff1a; 题目&#xff1a;飞行路线 思路&#xff1a; 题目&#xff1a;第二短路 思路&#xff1a; 题目&a…...

德迅云安全为您介绍关于抗D盾的一些事

抗D盾概述&#xff1a; 抗D盾是新一代的智能分布式云接入系统&#xff0c;接入节点采用多机房集群部署模式&#xff0c;隐藏真实服务器IP&#xff0c;类似于网站CDN的节点接入&#xff0c;但是“抗D盾”是比CDN应用范围更广的接入方式&#xff0c;适合任何TCP 端类应用包括&am…...

leetcode算法之位运算

目录 1.判断字符是否唯一2.丢失的数字3.两整数之和4.只出现一次的数字II5.消失的两个数字6.位1的个数7.比特位计数8.汉明距离 1.判断字符是否唯一 判断字符是否唯一 class Solution { public:bool isUnique(string astr) {//利用鸽巢原理做优化if(astr.size()>26) return…...

java常用的几个图片处理工具对Tiff文件的支持

ImageMagick 官网 https://imagemagick.org/&#xff0c; 支持多种格式。命令行工具很适合调试。功能很强大. 还有一款工具GraphicsMagick 是从ImageMagick的基础上研发出来的。 OpenCV 官网 https://opencv.org/ &#xff0c; github地址https://github.com/opencv/opencv&…...

SQL必知会(二)-SQL查询篇(11)-联结表

第12课、联结表 联结表 使用联结&#xff1a;之前的 SELECT 查询某些列&#xff0c;只是针对一张表进行检索的。&#xff08;即 FROM 表名&#xff09;。但是如果用户想要使用 SELECT 对存储在不同表中的某些列时&#xff0c;则需要使用联结表的方式来实现。 例子中有建立两个…...

多模态大一统:开启全模态LLM和通用AI时代的大门

多模态大一统:开启全模态LLM和通用AI时代的大门 1. 目前多模态实现的方法1.1 单独训练各领域模型1.2 多任务学习1.3 集成多模态模型1.4 通用多模态模型2. 多模态统一难点2.1 数据集对齐和融合2.2 大规模计算资源需求2.3 各领域特性的兼容性2.4 可解释性和泛化能力3. 全模态的好…...

Alibaba Nacos注册中心实战

为什么需要注册中心 思考&#xff1a;网络请求&#xff0c;如果服务提供者发生变动&#xff0c;服务调用者如何感知服务提供者的ip和端口变化&#xff1f; // 微服务之间通过RestTemplate调用&#xff0c;ip:port写死&#xff0c;如果ip或者port变化呢&#xff1f; String ur…...

京东数据采集与挖掘(京东大数据):2023年10月京东冰箱品牌销售排行榜

鲸参谋监测的京东平台10月份冰箱市场销售数据已出炉&#xff01; 10月份&#xff0c;冰箱市场的销售额有小幅上涨。鲸参谋数据显示&#xff0c;在京东平台上&#xff0c;今年10月冰箱市场的销量为94万&#xff0c;销售额将近23亿&#xff0c;同比增长超过1%。从价格上看&#x…...

某事业单位转型二类后绩效项目成功案例纪实

——事业单位从公益一类转向二类之后&#xff0c;如何通过绩效考核提高人员积极性 【客户行业】事业单位 【问题类型】绩效管理 【客户背景】 某国家级博物馆是由当地ZF与自然资源局共建共管的事业单位&#xff0c;是一家综合性较强的博物馆&#xff0c;入选过全国热搜博物…...

MySQL 和 SQL Server之间的数据迁移方法

目录 MySQL导入SQL Server 使用 SQL Server Management Studio (SSMS) 导入导出向导&#xff1a; 使用 SQL Server Integration Services (SSIS)&#xff1a; SQL Server 导入 MySQL 使用 SQL Server Management Studio (SSMS) 导出数据&#xff1a; 使用 MySQL Workbench…...