使用单独的重试逻辑在单个事务中执行 2 个方法
Execute 2 mthods in a songle transaction with separate Retry logic
以下是我的要求
begin trans
insertData();
updateData();
end trans
还可以说 insertDta 方法抛出一些错误然后我需要重试 5 次。与 updateData() 相同。我不应该同时重试这两种方法,即如果我重试 m2() 5 次它们 m1( ) 不应重试。
以下是正确的方法吗?我从另一个 class 调用 m3() 。
我担心的是拦截器是以正确和确定的顺序添加的。
@Repository
DaoA
{
void insertData();
}
@Repository
DaoB
{
void updateData();
}
下面是我的服务 class .
@Service
ServiceA
{
@Retryable( maxAttempts = 5)
public void m1 ()
{
daoA.insertData();
}
@Retryable( maxAttempts = 5)
public void m2 ()
{
daoB.updateData();
}
@Transactional
public void m3 ()
{
m1();
m2();
}
m3()
需要在不同的 bean 中 - 直接在 class 中调用 m1()
和 m2()
会绕过代理,它们不会被重试。
无论如何,交易都应该在重试逻辑之内,而不是相反;您需要为每次尝试开始一个新的交易。
如果我的要求正确,这应该适合你。
@Service
ServiceA {
public void m1 () {
daoA.insertData();
}
public void m2 () {
daoB.updateData();
}
@Transactional
@Retryable(value = {Exception.class}, maxAttempts = 5)
public void m3 () {
m1();
m2();
}
}
这将确保重试总数为 maxAttempts = 5
。
以下是我的要求
begin trans
insertData();
updateData();
end trans
还可以说 insertDta 方法抛出一些错误然后我需要重试 5 次。与 updateData() 相同。我不应该同时重试这两种方法,即如果我重试 m2() 5 次它们 m1( ) 不应重试。 以下是正确的方法吗?我从另一个 class 调用 m3() 。 我担心的是拦截器是以正确和确定的顺序添加的。
@Repository
DaoA
{
void insertData();
}
@Repository
DaoB
{
void updateData();
}
下面是我的服务 class .
@Service
ServiceA
{
@Retryable( maxAttempts = 5)
public void m1 ()
{
daoA.insertData();
}
@Retryable( maxAttempts = 5)
public void m2 ()
{
daoB.updateData();
}
@Transactional
public void m3 ()
{
m1();
m2();
}
m3()
需要在不同的 bean 中 - 直接在 class 中调用 m1()
和 m2()
会绕过代理,它们不会被重试。
无论如何,交易都应该在重试逻辑之内,而不是相反;您需要为每次尝试开始一个新的交易。
如果我的要求正确,这应该适合你。
@Service
ServiceA {
public void m1 () {
daoA.insertData();
}
public void m2 () {
daoB.updateData();
}
@Transactional
@Retryable(value = {Exception.class}, maxAttempts = 5)
public void m3 () {
m1();
m2();
}
}
这将确保重试总数为 maxAttempts = 5
。