1:spring的事务配置
tx:attributes
/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);
}
这个方法的事务不提交,导致死锁。
请各位帮忙分析一下真正的原因。谢谢。