JPA存储库上的Spring重试

时间:2019-03-22 13:19:37

标签: java spring-boot jpa spring-retry

我是Spring的新手,作为项目实现的一部分,我应该在调用JPA存储库的服务方法上添加spring retry。 代码如下所示

{ "keys": ["ctrl+t"], "command": "gototodo" }

数据库:Postgresql

应用程序:Java Spring Boot(使用公开的Rest API来获取所有帐户)

HikariPool MaximumPoolSize **:** 1

Hikari ConnectionTimeout **:** 1000

JMeter用于发送 10,000 个API请求。

问题:我可以看到 SQL EXCEPTION CAUGTH !!!!!!!!! 打印,但是我认为重试不起作用,因为我没有看到恢复方法的打印。我想念什么吗?

下面是gradle依赖项

@Retryable(value = {Exception.class},maxAttempts = 1,backoff = @Backoff(300))
public Page<Account> findAllAccounts(AccountSearchRequest account, Pageable pageable) {
    try {
        return map(accountSearchRepository.findAll(account, pageable));
    }catch (Exception e){
        System.out.println("SQL EXCEPTION CAUGTH!!!!!!!!!");
    }
    return null;
}
@Recover
public void recover(Exception e){
    System.out.println("!!!!!!!!!!!Failed to get connection!!!!!!");
}

2 个答案:

答案 0 :(得分:0)

尝试

@Retryable(value = {SQLException.class},maxAttempts = 1,backoff = @Backoff(300))
public Page<Account> findAllAccounts(AccountSearchRequest account, Pageable pageable) throws SQLException {    
       throw new SQLException("test");
}

@Recover
public void recover(Exception e){
    System.out.println("!!!!!!!!!!!Failed to get connection!!!!!!");
}

答案 1 :(得分:0)

感谢支持。

我发现问题在于@Recover方法的数据类型与@Retryable不同。 在上述情况下重试的条件

@Recover@Retryable应该是公开的并且具有相同的返回类型