我有一个spring-boot应用程序,它有一个POST REST API,实习生可以使用JPA和Hikari将数据插入到Postgresql中。由于Post请求的数量很大,我计划在JPA内置方法(如save()、saveAll()、findAll()等)上实现Spring重试,
连接池负责为您提供一个健康的连接,它经常监视可用的连接。在将连接移交给您之前,HikariCP使用测试查询或API测试连接(如果jdbc驱动程序符合JDBC4)。这里和这里有更多信息。
然而,一旦连接被移交,并且如果在执行查询时出现网络问题,客户端将得到一个执行。那重试是个好主意吗?我认为对于读取查询,这应该是好的,但对于更改数据的查询可能不是好的。例如,您的插入成功,但在客户端获得事务提交确认之前,网络问题发生了。所以现在插入了数据。如果您再次尝试,您将插入两次。
在RetryTemplate里面,执行excuter方法是重试还是失败是由RetryPolicy决定的,这也是一个RetryContext工厂.这个RetryTemplate有责任使用当前的策略创建一个RetryContext并且把它注入到RetryCallback在每一次尝试中。回调失败后RetryTemplate必须由RetryPolicy决定使其更新状态(存储在RetryContext中),
下面是execute()方法所做的事情
我想用Spring集成创建一个简单的IntegrationFlow,但我遇到了一些困难。 我想创建一个集成流,从Rabbit Mq中的队列中获取消息并将消息发布到endpointRest。 我要处理的问题是,当一个请求失败时,它会继续无休止地重试,如何在这段代码中实现重试策略?例如,我想要3次重试,第一次重试在1秒后,第二次重试在5秒后,第三次重试在1分钟后。
在瞬时失效之后做一个尝试它常常有助于在再试一次之前等待一会。因为通常失败是有一些问题引起的它只能通过等待来解决这些问题,如果RetryCallback失败,RetryTemplate可以暂停执行取决于BackoffPolicy在适当的位置 public interface BackoffPolicy { BackOffContext start(RetryContext context);
我试图测试使用自定义重试策略的重试模板。为了做到这一点,我使用以下示例: https://github.com/spring-projects/spring-retry/blob/master/src/test/java/org/springframework/retry/support/retrytemplatetests.java#l57 基本上,我的目标是在得到一些特定的http错误状态(例
我有以下步骤在批处理工作。 当某个异常抛出时,我在parseStepSkipListener中捕捉他并登录数据库。 我期待以下行为: 作业已启动 执行前面的步骤 开始执行解析步骤 阅读项目 进程项 写 哦,异常。 捕获异常,登录数据库,转到下一个块(读取、处理、写入)。 作业已启动 执行前面的步骤 开始执行解析步骤 阅读项目 进程项 写 哦,异常。 进程项 写入项 哦,异常。 捕获异常,登录数据库