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);
}
这个方法的事务不提交,导致死锁。
请各位帮忙分析一下真正的原因。谢谢。
相关推荐
然而,在实际开发中,有时我们可能会遇到"Spring事务不起作用"的问题。这个问题可能是由多种原因引起的,包括但不限于配置错误、事务注解使用不当、事务传播行为理解有误等。下面我们将深入探讨这些可能的原因,并...
Spring支持全局事务(JTA),可以跨多个数据源进行事务控制。 - 如果不使用JTA,可以为每个数据源设置独立的事务管理器,但这样可能会丧失部分事务一致性。 7. **注意事项**: - 数据源的切换需要在事务开始之前...
7. **事务管理**:理解Spring的声明式事务管理,如何在需要的地方开启和提交事务。 8. **权限控制**:实现基于角色的访问控制(Role-Based Access Control, RBAC),对用户操作进行权限校验。 9. **页面模板**:使用...
Spring还包含了数据访问、事务管理、Web应用以及更多的功能模块。 **Struts框架**: Struts是MVC(Model-View-Controller)设计模式的实现,主要用于控制应用程序的流程。它负责接收HTTP请求,调度业务逻辑,处理...
- 项目框架技术:SSM框架是Java Web开发中的主流选择,Spring负责依赖注入和事务管理,SpringMVC处理HTTP请求,MyBatis作为持久层框架,简化数据库操作。 - 三层架构:应用分为表现层、业务逻辑层和数据访问层,...
Struts是MVC设计模式的实现,负责表示层,Spring则处理业务逻辑层,提供了ICO(控制反转)和AOP(面向切面编程),并支持事务管理和与其他框架的集成。Hibernate作为持久层框架,实现了对象与关系数据库之间的映射,...
通过这种形式,开发者可以向同行请教问题,分享代码示例,讨论最新趋势,甚至合作开发项目。邮件列表的开放性使得信息共享变得容易,同时也可以形成持久的技术档案,供后来者查阅。 提到"dsmaiil"这个文件,这可能...
本文档将介绍一种适合初学者的学习顺序和方法,主要围绕SSH(Spring、Struts、Hibernate)框架进行。 首先,学习J2EE之前的基础是J2SE(Java 2 Platform, Standard Edition)。J2SE是Java的核心部分,包括基础语法...
- **考核点**:熟悉企业常用技术栈(如Spring、MySQL、MQ、Redis等),了解微服务架构、分布式事务处理、高并发场景下的解决方案。 - **考核基准**: - 初级:了解Spring框架的基本用法,能够使用MySQL进行简单CRUD...
"itcaststore"项目可能采用了某种MVC框架,如Spring MVC或者Struts2,以提高开发效率和代码可维护性。这些框架提供了控制器、模型和视图的统一管理,简化了请求转发和模型绑定等操作。 5. **Web.xml配置** `WEB-...