Browse Source

Expose actual result value for @CacheEvict condition

Closes gh-32960
pull/33047/head
Juergen Hoeller 2 years ago
parent
commit
624d6dd167
  1. 4
      spring-context/src/main/java/org/springframework/cache/interceptor/CacheAspectSupport.java
  2. 20
      spring-context/src/test/java/org/springframework/cache/CacheReproTests.java

4
spring-context/src/main/java/org/springframework/cache/interceptor/CacheAspectSupport.java vendored

@ -630,7 +630,7 @@ public abstract class CacheAspectSupport extends AbstractCacheInvoker @@ -630,7 +630,7 @@ public abstract class CacheAspectSupport extends AbstractCacheInvoker
if (result instanceof CompletableFuture<?> future) {
return future.whenComplete((value, ex) -> {
if (ex == null) {
performCacheEvicts(applicable, result);
performCacheEvicts(applicable, value);
}
});
}
@ -1112,7 +1112,7 @@ public abstract class CacheAspectSupport extends AbstractCacheInvoker @@ -1112,7 +1112,7 @@ public abstract class CacheAspectSupport extends AbstractCacheInvoker
ReactiveAdapter adapter = (result != null ? this.registry.getAdapter(result.getClass()) : null);
if (adapter != null) {
return adapter.fromPublisher(Mono.from(adapter.toPublisher(result))
.doOnSuccess(value -> performCacheEvicts(contexts, result)));
.doOnSuccess(value -> performCacheEvicts(contexts, value)));
}
return NOT_HANDLED;
}

20
spring-context/src/test/java/org/springframework/cache/CacheReproTests.java vendored

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2023 the original author or authors.
* Copyright 2002-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -606,9 +606,9 @@ class CacheReproTests { @@ -606,9 +606,9 @@ class CacheReproTests {
return CompletableFuture.completedFuture(item);
}
@CacheEvict(cacheNames = "itemCache", allEntries = true)
public CompletableFuture<Void> clear() {
return CompletableFuture.completedFuture(null);
@CacheEvict(cacheNames = "itemCache", allEntries = true, condition = "#result > 0")
public CompletableFuture<Integer> clear() {
return CompletableFuture.completedFuture(1);
}
}
@ -655,9 +655,9 @@ class CacheReproTests { @@ -655,9 +655,9 @@ class CacheReproTests {
return Mono.just(item);
}
@CacheEvict(cacheNames = "itemCache", allEntries = true)
public Mono<Void> clear() {
return Mono.empty();
@CacheEvict(cacheNames = "itemCache", allEntries = true, condition = "#result > 0")
public Mono<Integer> clear() {
return Mono.just(1);
}
}
@ -706,9 +706,9 @@ class CacheReproTests { @@ -706,9 +706,9 @@ class CacheReproTests {
return Flux.fromIterable(item);
}
@CacheEvict(cacheNames = "itemCache", allEntries = true)
public Flux<Void> clear() {
return Flux.empty();
@CacheEvict(cacheNames = "itemCache", allEntries = true, condition = "#result > 0")
public Flux<Integer> clear() {
return Flux.just(1);
}
}

Loading…
Cancel
Save