0 0

请教spring的事务控制5

1:spring的事务配置
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
     <tx:method name="save*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" />
       <tx:method name="add*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
       <tx:method name="edit*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
       <tx:method name="remove*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" />
       <tx:method name="insert*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="update*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="del*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="*" read-only="false" rollback-for="java.lang.Exception"/>
</tx:attributes>
</tx:advice>

<aop:config> 
<aop:pointcut id="interceptorPointCuts" 
expression="execution(public * com.*.*.bl.*.*.*(..))" /> 
<aop:advisor advice-ref="txAdvice"  pointcut-ref="interceptorPointCuts" /> 
</aop:config>

2:业务层的代码

private TestDao testDao;
public void saveData1(long id)
{
    delData2(id);
    testDao.addA1(A1对象);   
}

private void delData2(long id)
{
  testDao.deleteA1ById(id);
}


3:控制层action调用
private TestSverice testSvercie;
testSvercie.saveData1(id);

请问:1:
业务层的业务控制:
saveData1和delData2是不是共用一个事务

2:如果saveData1和delData2不是共用一个事务,当特定的情况下,如果saveData1和delData2获取的不是同一个连接,导致testDao.deleteA1ById(id);的操作无法提交,而testDao.addA1(A1对象);   则一直等待。业务delData2是私有方法,没有事务控制,而此刻他的数据库连接又是一个独立的。这样就导致锁表。
如果delData2的数据库连接和saveData1的数据库连接是同一个,则会被提交或回滚。


现在的问题是:action调用testSvercie.saveData1(id);会在非常底概率下发生private void delData2(long id)
{
  testDao.deleteA1ById(id);
}
这个方法的事务不提交,导致死锁。

请各位帮忙分析一下真正的原因。谢谢。

1个答案 按时间排序 按投票排序

0 0

采纳的答案

1、不是一个事务。
2、配置好像有点问题,execution(* com.*.*.bl.*.*.*(..)),我觉得去掉public就会正常的。或者直接像下面那样写不行么?
public void saveData1(long id)
{
    testDao.deleteA1ById(id); 
    testDao.addA1(A1对象);   
}

2012年11月14日 14:22

相关推荐

    请教:spring事务不起作用

    然而,在实际开发中,有时我们可能会遇到"Spring事务不起作用"的问题。这个问题可能是由多种原因引起的,包括但不限于配置错误、事务注解使用不当、事务传播行为理解有误等。下面我们将深入探讨这些可能的原因,并...

    ssm框架集成多数据源源码

    Spring支持全局事务(JTA),可以跨多个数据源进行事务控制。 - 如果不使用JTA,可以为每个数据源设置独立的事务管理器,但这样可能会丧失部分事务一致性。 7. **注意事项**: - 数据源的切换需要在事务开始之前...

    ssm实战项目米米商城

    7. **事务管理**:理解Spring的声明式事务管理,如何在需要的地方开启和提交事务。 8. **权限控制**:实现基于角色的访问控制(Role-Based Access Control, RBAC),对用户操作进行权限校验。 9. **页面模板**:使用...

    Java 简单的SSH框架 搭建

    Spring还包含了数据访问、事务管理、Web应用以及更多的功能模块。 **Struts框架**: Struts是MVC(Model-View-Controller)设计模式的实现,主要用于控制应用程序的流程。它负责接收HTTP请求,调度业务逻辑,处理...

    基于ssm+mysql的考研指导平台源码数据库论文.doc

    - 项目框架技术:SSM框架是Java Web开发中的主流选择,Spring负责依赖注入和事务管理,SpringMVC处理HTTP请求,MyBatis作为持久层框架,简化数据库操作。 - 三层架构:应用分为表现层、业务逻辑层和数据访问层,...

    实用计算机实习日记三篇.docx

    Struts是MVC设计模式的实现,负责表示层,Spring则处理业务逻辑层,提供了ICO(控制反转)和AOP(面向切面编程),并支持事务管理和与其他框架的集成。Hibernate作为持久层框架,实现了对象与关系数据库之间的映射,...

    雷の龙邮件列表

    通过这种形式,开发者可以向同行请教问题,分享代码示例,讨论最新趋势,甚至合作开发项目。邮件列表的开放性使得信息共享变得容易,同时也可以形成持久的技术档案,供后来者查阅。 提到"dsmaiil"这个文件,这可能...

    J2EE入门学习方法指导

    本文档将介绍一种适合初学者的学习顺序和方法,主要围绕SSH(Spring、Struts、Hibernate)框架进行。 首先,学习J2EE之前的基础是J2SE(Java 2 Platform, Standard Edition)。J2SE是Java的核心部分,包括基础语法...

    Java面试考核目标.docx

    - **考核点**:熟悉企业常用技术栈(如Spring、MySQL、MQ、Redis等),了解微服务架构、分布式事务处理、高并发场景下的解决方案。 - **考核基准**: - 初级:了解Spring框架的基本用法,能够使用MySQL进行简单CRUD...

    itcaststore.zip

    "itcaststore"项目可能采用了某种MVC框架,如Spring MVC或者Struts2,以提高开发效率和代码可维护性。这些框架提供了控制器、模型和视图的统一管理,简化了请求转发和模型绑定等操作。 5. **Web.xml配置** `WEB-...

Global site tag (gtag.js) - Google Analytics