From 6a08bfdff75db1a8dfb9ab11d76df5a12bb183c4 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 25 Sep 2019 12:10:23 +0200 Subject: [PATCH] Avoid unnecessary synchronization for non-existent missing caches Closes gh-23635 --- .../cache/support/AbstractCacheManager.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/spring-context/src/main/java/org/springframework/cache/support/AbstractCacheManager.java b/spring-context/src/main/java/org/springframework/cache/support/AbstractCacheManager.java index 50ab5ccb3173..981200b5388b 100644 --- a/spring-context/src/main/java/org/springframework/cache/support/AbstractCacheManager.java +++ b/spring-context/src/main/java/org/springframework/cache/support/AbstractCacheManager.java @@ -87,25 +87,26 @@ public void initializeCaches() { @Override @Nullable public Cache getCache(String name) { + // Quick check for existing cache... Cache cache = this.cacheMap.get(name); if (cache != null) { return cache; } - else { - // Fully synchronize now for missing cache creation... + + // The provider may support on-demand cache creation... + Cache missingCache = getMissingCache(name); + if (missingCache != null) { + // Fully synchronize now for missing cache registration synchronized (this.cacheMap) { cache = this.cacheMap.get(name); if (cache == null) { - cache = getMissingCache(name); - if (cache != null) { - cache = decorateCache(cache); - this.cacheMap.put(name, cache); - updateCacheNames(name); - } + cache = decorateCache(missingCache); + this.cacheMap.put(name, cache); + updateCacheNames(name); } - return cache; } } + return cache; } @Override