Spring Retry是否可以保证与Spring的@Transactional
注释一起使用?
具体来说,我正在尝试使用@Retryable
乐观锁定.似乎它将依赖于创建的AOP代理的顺序.例如,如果调用如下所示:
调用代码 - >重试代理 - >事务代理 - >实际数据库代码
然后它将正常工作,但如果代理结构如下:
调用代码 - >事务代理 - >重试代理 - >实际数据库代码
然后重试将不起作用,因为关闭事务的行为是抛出optmistic锁定异常的行为.
在测试中,它似乎生成了第一个案例(重试,然后交易),但我不知道这是保证行为还是幸运.
我正在使用Spring.net 1.2和NHibernate 2.0.1.
在我的项目中我面临一些死锁问题,除了数据库调整以最小化出现我想实现Springs RetryAdvice来处理这个问题.
我找不到任何工作示例如何配置它.该参考似乎很清楚如何使用它,但不知何故,我不能让它工作.
<!--Used to translate NHibernate exception to Spring.DataAccessExceptions-->
<object type="Spring.Dao.Attributes.PersistenceExceptionTranslationPostProcessor, Spring.Data"/>
<!--ExceptionHandler performing Retry on Deadlocks-->
<object name="ExceptionHandlingAdvice" type="Spring.Aspects.RetryAdvice, Spring.Aop">
<property name="retryExpression" value="on exception name DeadLockLoserException retry 3x rate (1*#n + 0.5)"/>
</object>
Run Code Online (Sandbox Code Playgroud)
我已将[Repository]属性添加到我的DAO以启用ExceptionTranslation,并尝试将RetryAdvice添加到我正在使用的TransactionProxyFactoryObject但它不起作用.我不明白在哪里提出这个建议.我是否必须声明一个PointCut来添加它,或者我怎么能让它按预期工作.
Thx提前 - 任何帮助赞赏.
spring ×2
aop ×1
hibernate ×1
java ×1
nhibernate ×1
spring-data ×1
spring-retry ×1
spring.net ×1