java - 如何使 Failsafe RetryPolicy 处理 ConstraintVoilationException
问题描述
我试图通过读取来自每次通过单独线程触发的活动 mq 的消息来在表上插入和更新。有时插入查询会因为 ConstraintVoilationException 而失败。我想重试,因为代码会将重试尝试视为更新,并且不会出现 ConstraintVoilationException。
但是,RetryPolicy 并未处理此异常。我该如何定制它?
故障保护神器版本:net.jodah (2.3.3)
这是代码示例,其中“T”是我的实体的类名。
@Transactional
processTxn(T t){
RetryPolicy<T> rp = RetryPolicy<T>.handle(ConstraintVoilationException.class).withMaxRetries(3);
Failsafe.with(rp).run(() -> insertOrUpdateMethod(t));
}
@Transactional
insertOrUpdateMethod (T t){
//Fetch instance of t from DB, if it exists - fire update on a few columns
//else insert a new row
}
我也用 DataIntegrityVoilationException 和 SQLIntegrityConstraintVoilationException 尝试了这段代码,但代码在失败后不会重试。
解决方案
推荐阅读
- php - 直接从 Google Cloud Storage 传递文件流以 PHP 输出
- html - 电子邮件模板无法在 Gmail 客户端 Iphone 中正确呈现
- docker - NextCloud Docker 发送未加密的凭证
- excel - 工作代码返回运行时错误“-2147352571 (80020005)”
- python - 在同一数据框列中添加值
- c++ - 如何将一个结构分配给另一个 (C++14)
- faunadb - FaunaDB:查询其他集合未引用的所有文档
- mongodb - NestJS中的TypeORM无法连接到MongoDB
- svelte-3 - 生产中的 Svelte 路由不适用于动态构建链接(Svelte Router SPA)
- python - 如何从 hydra 配置文件传递字典元素