デッドロックを引き起こすテーブルの更新があり、メソッドが何らかのロック例外を取得したときに Spring Retry を再試行しようとしています。maxAttempts、値、およびバックオフを取り出してみましたが、例外をキャッチしていないようです。何か不足していますか?アプリケーション ファイルで Bean を宣言する必要がありますか? どんな助けでも大歓迎です!
アプリケーション.Java
@SpringBootApplication
@EnableRetry
public class Application extends SpringBootServletInitializer {
詳細サービス
@Service
public class DetailService {
@Retryable(maxAttempts = 5, value = { LockAcquisitionException.class, ConcurrencyFailureException.class }, backoff = @Backoff(delay = 500, multiplier = 2) )
public void delete(final String detailCode) {
try {
this.delete(this.dao.findByDetailCode(detailCode));
} catch (LockAcquisitionException | ConcurrencyFailureException e) {
LOG.warn("Locking error! Going to retry", e.getMessage());
throw e;
}
}
public void delete(Details detail) {
this.dao.delete(detail);
}
@Retryable(maxAttempts = 5, value = { LockAcquisitionException.class, ConcurrencyFailureException.class }, backoff = @Backoff(delay = 500, multiplier = 2) )
public void delete(final Integer id) {
if (id != null) {
try {
this.delete(this.dao.findOne(id));
} catch (LockAcquisitionException | ConcurrencyFailureException e) {
LOG.warn("Locking error! Going to retry", e.getMessage());
throw e;
}
}
}
編集
上記の DetailService を書き直して、詳細を提供し、不足しているメソッドを追加しました