我正在使用mysql开发Java Spring Hibernate项目。
我试图在级联中插入一些插件。这些作业会被抛到集群上,因此它们几乎可以同时发生,因此存在死锁问题。
我有这个错误:
试图锁定时发现死锁;尝试重新启动交易
我发现here有针对spring developper的@RetryTransaction。一种配置here的方法。
他们说:
方法的类必须编织(在构建时或运行时) 使用AspectJ编译器和RetryTransactionAspect方面 (包含在dellroad-stuff JAR文件中)。
这是什么意思?
但我没有成功使它成功。它从不重启交易。我错过了什么?
谢谢!
@Override
@RetryTransaction
@Transactional
public void save(AnalyseResult analyseResult){
@SuppressWarnings("deprecation")
final int attempt = RetryTransactionAspect.getAttempt();
System.out.println("#############");
System.out.println("Retry Transact : "+attempt);
System.out.println("#############");
analyseResultDao.save(analyseResult);
}
在我的BeanConfig.xml中:
<bean class="org.dellroad.stuff.spring.RetryTransactionAspect" factory-method="aspectOf">
<property name="persistenceExceptionTranslator" ref="hibernateExceptionTranslator"> </property>
<property name="maxRetriesDefault" value="4"></property>
<property name="initialDelayDefault" value="25"></property>
<property name="maximumDelayDefault" value="5000"></property>
</bean>