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

用墨刀做视频网站电商企业有哪些

用墨刀做视频网站,电商企业有哪些,wordpress文章 公众号,定制开发企业Spring 的事务管理是其核心功能之一,通过 声明式事务 和 编程式事务 两种方式实现。其底层原理基于 AOP(面向切面编程) 和 动态代理,结合事务管理器(PlatformTransactionManager)控制事务边界,确…

Spring 的事务管理是其核心功能之一,通过 声明式事务编程式事务 两种方式实现。其底层原理基于 AOP(面向切面编程)动态代理,结合事务管理器(PlatformTransactionManager)控制事务边界,确保数据一致性。


🧠 一、事务实现的核心机制

1. 基于 AOP 的声明式事务

  • @Transactional 注解标记的方法会被 Spring AOP 拦截,生成代理对象。
  • 代理对象在方法执行前后插入事务逻辑(开启、提交、回滚)。

2. 事务的线程绑定

  • Spring 使用 ThreadLocal 将事务绑定到当前线程,确保同一事务内共享数据库连接。
  • 避免多线程下事务冲突,但需注意线程池或异步调用时的事务传播问题。

3. 事务管理器接口(PlatformTransactionManager)

  • 定义事务的基本操作:getTransaction()commit()rollback()
  • 常见实现:
    • DataSourceTransactionManager(单数据源)
    • JtaTransactionManager(分布式事务)
    • HibernateTransactionManager(Hibernate 集成)

🔄 二、事务处理流程(关键步骤)

1. 启用事务:@EnableTransactionManagement

  • 导入 ProxyTransactionManagementConfiguration,注册事务相关的切面和代理工厂。
  • 创建事务拦截器(TransactionInterceptor)和事务顾问(BeanFactoryTransactionAttributeSourceAdvisor)。

2. 生成代理对象

  • Spring 使用 JDK 动态代理(接口方法)或 CGLIB 代理(子类继承)生成目标类的代理。
  • 代理类拦截 @Transactional 方法,调用 TransactionInterceptor.invoke()

3. 事务拦截器(TransactionInterceptor)

  • 核心方法 invokeWithinTransaction()
    protected Object invokeWithinTransaction(Method method, Class<?> targetClass, final InvocationCallback invocation) {// 获取事务属性(传播行为、隔离级别等)TransactionAttribute txAttr = getTransactionAttributeSource().getTransactionAttribute(method, targetClass);// 获取事务管理器PlatformTransactionManager tm = determineTransactionManager(txAttr);// 开启事务TransactionStatus status = tm.getTransaction(txAttr);try {// 执行目标方法Object result = invocation.proceedWithInvocation();// 提交事务tm.commit(status);return result;} catch (Throwable ex) {// 回滚事务tm.rollback(status);throw ex;}
    }
    

📦 三、事务传播行为(Propagation Behavior)

行为说明
REQUIRED默认行为。当前有事务则加入,无事务则新建
REQUIRES_NEW总是新建事务,挂起已有事务
SUPPORTS支持当前事务,无事务则以非事务执行
NOT_SUPPORTED不支持事务,以非事务执行
MANDATORY必须存在事务,否则抛异常
NEVER不能存在事务,否则抛异常
NESTED嵌套事务,外层事务回滚会影响内层

🔐 四、事务隔离级别(Isolation Level)

级别脏读不可重复读幻读实现方式
DEFAULT由数据库决定---
READ_UNCOMMITTED最低隔离
READ_COMMITTEDOracle 默认
REPEATABLE_READMySQL 默认
SERIALIZABLE最高隔离

⚠️ 五、事务失效的常见场景(含源码级原因)

1. 方法非 public

  • Spring AOP 默认只拦截 public 方法(JDK 动态代理限制)。
  • 解决:改为 public 方法,或启用 AspectJ 代理。

2. 内部调用(Self-invocation)

  • 同一类中调用 @Transactional 方法时,代理失效。
    @Service
    public class MyService {public void outerMethod() {innerMethod(); // 事务失效!}@Transactionalpublic void innerMethod() { ... }
    }
    
  • 解决:通过注入自身 Bean 调用:
    @Autowired
    private MyService self;public void outerMethod() {self.innerMethod(); // 事务生效
    }
    

3. 未正确配置事务管理器

  • 缺少 PlatformTransactionManager Bean。
  • 解决:显式配置事务管理器(如 DataSourceTransactionManager)。

4. 异常未触发回滚

  • 默认仅对 RuntimeExceptionError 回滚。
  • 解决:指定 rollbackFor 属性:
    @Transactional(rollbackFor = Exception.class)
    public void method() throws Exception { ... }
    

🧱 六、事务与 AOP 的关系

组件作用
TransactionInterceptor事务切面,拦截方法并控制事务
TransactionAttributeSource解析 @Transactional 注解,获取事务属性
TransactionAspectSupport提供事务处理的基础支持
ProxyFactory创建动态代理(JDK/CGLIB)

📊 七、Spring Boot 中的事务自动装配

Spring Boot 通过 @EnableTransactionManagement 自动启用事务支持,并根据依赖自动配置事务管理器:

  • 如果存在单数据源 → 注册 DataSourceTransactionManager
  • 如果存在 JTA → 注册 JtaTransactionManager

配置示例(application.properties):

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=123456
spring.jpa.hibernate.ddl-auto=update

✅ 总结

特性Spring 事务实现
实现方式AOP + 动态代理
事务边界ThreadLocal 管理线程上下文
传播行为7 种行为,控制事务嵌套关系
隔离级别5 种级别,控制并发数据一致性
失效场景方法非 public、内部调用、异常未触发回滚等
事务管理器PlatformTransactionManager 接口实现


文章转载自:

http://OJ6vBgaN.bxczt.cn
http://R3TRh5sq.bxczt.cn
http://Ql5jgbgy.bxczt.cn
http://HFWxUgIT.bxczt.cn
http://FPaaXLhz.bxczt.cn
http://ac0vXYdt.bxczt.cn
http://GBkfvC06.bxczt.cn
http://TkrYkkPr.bxczt.cn
http://hD7PbatX.bxczt.cn
http://it6vqiwf.bxczt.cn
http://BcRCGx83.bxczt.cn
http://DiMTTtR8.bxczt.cn
http://B5zfXlSv.bxczt.cn
http://JmAg2k8S.bxczt.cn
http://BQociOtb.bxczt.cn
http://TFYDovob.bxczt.cn
http://zsUfcpy5.bxczt.cn
http://FlUOBJgQ.bxczt.cn
http://AMbGkrro.bxczt.cn
http://DF8OTMTp.bxczt.cn
http://8qazQXpX.bxczt.cn
http://yQ8yqWRx.bxczt.cn
http://a7Gxwj8p.bxczt.cn
http://Rca2yNgm.bxczt.cn
http://McIAV9nO.bxczt.cn
http://EKOWClqM.bxczt.cn
http://C2bwlqYS.bxczt.cn
http://FvaS5LZk.bxczt.cn
http://FJDKMuiX.bxczt.cn
http://4nD2D4T0.bxczt.cn
http://www.dtcms.com/wzjs/654572.html

相关文章:

  • 平潭县机场建设网站做网站难吗?
  • wordpress 登陆界面襄阳抖音seo找哪家
  • 网站改版301怎么做如何做简单视频网站
  • 企业网站结构asp.net mvc做网站难吗
  • 自己弄个网站昌吉建设网站
  • 企业商城网站建设方案顺德网站建设基本流程
  • 网站模块制作知名企业门户网站建设联系电话
  • 网站不被收录了远大科技 网站建设
  • 公司建站电脑QQ浮动窗口怎做电脑网站
  • 深圳设计网页制作公司seo是什么职业做什么的
  • 响应式网站推广长春网络建站
  • 镇江网站网站建设少儿编程加盟哪个品牌好
  • 用了wordpress的网站aaa免费服务器
  • 青海建设厅网站黑名单班级网站建设思路
  • 背景色搭配网站北京大学网络服务
  • 郑州市 网站建设wordpress采集微信公众文章内容
  • wordpress文章批量编辑器汕头seo网站排名
  • 南阳专业网站排名推广百度网页版
  • qq空间刷赞网站推广佛山建网站价格
  • 怀化网站优化多少钱专注于网络推广及网站建设
  • ps做网站时画布宽度做网站技术方法有
  • 网站更改建设方案模板东莞网络公司哪家好
  • 网站开发公司售后服务如何让产品吸引顾客
  • 微信群如何推广网站建设学网站开发哪个好
  • 云南网络公司网站建设html5网站开发价格
  • eclipse开发网站用vue做前端wordpress vip
  • 南昌哪个公司做网站好wordpress出错
  • 简单学校网站模板外贸营销方式有哪些
  • 网站备案期间做什么网站统计 中文域名
  • 长沙专业建设网站企业网站关键词多少个好