私はSpring Cachingを使用したいSpring Data Restリポジトリを持っています。Spring Data Restリポジトリを使用したSpringキャッシュは、例外時の保存結果をキャッシュしています
エラーがない場合、キャッシュは正常に動作します。ただし、保存の結果が検証例外の場合、エンティティはデータベースに書き込まれなくてもキャッシュされます。私は新しいビジネスユニットの下にメッセージ本体を投稿する場合
SDRリポジトリ
@RepositoryRestResource(collectionResourceRel = "businessUnits", path = "businessUnits")
public interface BusinessUnitRepository extends JpaRepository<BusinessUnit, UUID> {
@Override
@Cacheable(value = "lookups", cacheManager = "vaultCache")
BusinessUnit findOne(final UUID id);
@Override
@CacheEvict(value = "lookups", cacheManager = "vaultCache", allEntries = true, beforeInvocation = true)
BusinessUnit save(BusinessUnit entity);
それは正しく保存されます。レコードを取得するための最初のGETがデータベースにヒットし、その後のGETがキャッシュから取得されます。
{
"name": "Test_Business_2",
"effectiveDate": "2019-12-16T11:11:11.111+0000",
"expirationDate": "2020-12-16T11:11:11.111+0000",
"businessUnitType": "/businessUnitTypes/38faf33c-5454-4245-bc69-2b31e510fa6b"
}
BusinessUnitエンティティは、effectiveDateフィールドにnullではありません。私はヌルeffectiveDateとのビジネスユニットにパッチを適用
@NotNull
@Column(name = "effective_date")
private Timestamp effectiveDate;
。応答はエラーです。例外が記録され、データベースは更新されません。
{
"effectiveDate": null
}
私はデシベルを照会するとき、私はbusinessUnitsエンドポイントでGETを行う際に、レコードが、しかし
NAME EFFECTIVE_DATE EXPIRATION_DATE
Test_Business_2,2019-12-16 06:11:11,2020-12-16 06:11:11
を更新されませんでした参照してください。レコードを読み取るためにデータベースにヒットせず、null effectiveDateが戻されます。
{
"createDate": "2017-02-20T13:38:00.386+0000",
"lastModifiedDate": "2017-02-20T13:38:00.386+0000",
"effectiveDate": null,
"expirationDate": "2020-12-16T11:11:11.111+0000",
"name": "Test_Business_2", ...
したがって、例外がスローされる原因となったデータは、キャッシュに格納されているようです。
保存時にデータベースが更新されないときに、値がキャッシュに保存されないように変更する必要はありますか?
私は何か助けやアドバイスをいただきありがとうございます。ありがとう。
問題の解決策が見つかりませんでしたが、回避策が見つかりました。エラーが表示された場合、例外がスローされていますが、キャッシュは追い出されていません。例外を処理するメソッドでは、プログラムでキャッシュをクリアできます。 キャッシュキャッシュ= cacheManager.getCache( "lookups"); cache.clear(); 次に、キャッシュはクリアされ、「例外」値は含まれません。 –