diff --git a/build.gradle b/build.gradle index 37d22c54f9..cb69c3ee8f 100644 --- a/build.gradle +++ b/build.gradle @@ -32,7 +32,7 @@ configure(allprojects) { project -> version = qualifyVersionIfNecessary(version) ext.aspectjVersion = "1.9.0.BETA-3" - ext.caffeineVersion = "2.0.3" + ext.caffeineVersion = "2.1.0" ext.eclipselinkVersion = "2.4.2" ext.ehcacheVersion = "2.10.1" ext.ehcachejcacheVersion = "1.0.1" diff --git a/spring-context-support/src/main/java/org/springframework/cache/caffeine/CaffeineCache.java b/spring-context-support/src/main/java/org/springframework/cache/caffeine/CaffeineCache.java index 64cfcd61b3..d9fcec586a 100644 --- a/spring-context-support/src/main/java/org/springframework/cache/caffeine/CaffeineCache.java +++ b/spring-context-support/src/main/java/org/springframework/cache/caffeine/CaffeineCache.java @@ -29,7 +29,7 @@ import org.springframework.util.Assert; * Spring {@link org.springframework.cache.Cache} adapter implementation * on top of a Caffeine {@link com.github.benmanes.caffeine.cache.Cache} instance. * - *

Requires Caffeine 2.0 or higher. + *

Requires Caffeine 2.1 or higher. * * @author Ben Manes * @author Juergen Hoeller diff --git a/spring-context-support/src/main/java/org/springframework/cache/caffeine/CaffeineCacheManager.java b/spring-context-support/src/main/java/org/springframework/cache/caffeine/CaffeineCacheManager.java index c7a18f4a4c..bedcff29e6 100644 --- a/spring-context-support/src/main/java/org/springframework/cache/caffeine/CaffeineCacheManager.java +++ b/spring-context-support/src/main/java/org/springframework/cache/caffeine/CaffeineCacheManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2016 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. @@ -25,6 +25,7 @@ import java.util.concurrent.ConcurrentMap; import com.github.benmanes.caffeine.cache.CacheLoader; import com.github.benmanes.caffeine.cache.Caffeine; +import com.github.benmanes.caffeine.cache.CaffeineSpec; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; @@ -38,10 +39,12 @@ import org.springframework.util.ObjectUtils; * with no dynamic creation of further cache regions at runtime. * *

The configuration of the underlying cache can be fine-tuned through a - * {@link Caffeine} builder, passed into this CacheManager through - * {@link #setCaffeine}. + * {@link Caffeine} builder or {@link CaffeineSpec}, passed into this + * CacheManager through {@link #setCaffeine}/{@link #setCaffeineSpec}. + * A {@link CaffeineSpec}-compliant expression value can also be applied + * via the {@link #setCacheSpecification "cacheSpecification"} bean property. * - *

Requires Caffeine 2.0 or higher. + *

Requires Caffeine 2.1 or higher. * * @author Ben Manes * @author Juergen Hoeller @@ -103,9 +106,30 @@ public class CaffeineCacheManager implements CacheManager { * @see #createNativeCaffeineCache * @see com.github.benmanes.caffeine.cache.Caffeine#build() */ - public void setCaffeine(Caffeine cacheBuilder) { - Assert.notNull(cacheBuilder, "Caffeine must not be null"); - doSetCaffeine(cacheBuilder); + public void setCaffeine(Caffeine caffeine) { + Assert.notNull(caffeine, "Caffeine must not be null"); + doSetCaffeine(caffeine); + } + + /** + * Set the {@link CaffeineSpec} to use for building each individual + * {@link CaffeineCache} instance. + * @see #createNativeCaffeineCache + * @see com.github.benmanes.caffeine.cache.Caffeine#from(CaffeineSpec) + */ + public void setCaffeineSpec(CaffeineSpec caffeineSpec) { + doSetCaffeine(Caffeine.from(caffeineSpec)); + } + + /** + * Set the Caffeine cache specification String to use for building each + * individual {@link CaffeineCache} instance. The given value needs to + * comply with Caffeine's {@link CaffeineSpec} (see its javadoc). + * @see #createNativeCaffeineCache + * @see com.github.benmanes.caffeine.cache.Caffeine#from(String) + */ + public void setCacheSpecification(String cacheSpecification) { + doSetCaffeine(Caffeine.from(cacheSpecification)); } /** diff --git a/spring-context-support/src/test/java/org/springframework/cache/caffeine/CaffeineCacheManagerTests.java b/spring-context-support/src/test/java/org/springframework/cache/caffeine/CaffeineCacheManagerTests.java index e8a7c76110..ca4fc2cedf 100644 --- a/spring-context-support/src/test/java/org/springframework/cache/caffeine/CaffeineCacheManagerTests.java +++ b/spring-context-support/src/test/java/org/springframework/cache/caffeine/CaffeineCacheManagerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2016 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. @@ -18,6 +18,7 @@ package org.springframework.cache.caffeine; import com.github.benmanes.caffeine.cache.CacheLoader; import com.github.benmanes.caffeine.cache.Caffeine; +import com.github.benmanes.caffeine.cache.CaffeineSpec; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -119,7 +120,7 @@ public class CaffeineCacheManagerTests { } @Test - public void changeCacheSpecificationRecreateCache() { + public void changeCaffeineRecreateCache() { CaffeineCacheManager cm = new CaffeineCacheManager("c1"); Cache cache1 = cm.getCache("c1"); @@ -133,6 +134,26 @@ public class CaffeineCacheManagerTests { assertSame(cache1x, cache1xx); } + @Test + public void changeCaffeineSpecRecreateCache() { + CaffeineCacheManager cm = new CaffeineCacheManager("c1"); + Cache cache1 = cm.getCache("c1"); + + cm.setCaffeineSpec(CaffeineSpec.parse("maximumSize=10")); + Cache cache1x = cm.getCache("c1"); + assertTrue(cache1x != cache1); + } + + @Test + public void changeCacheSpecificationRecreateCache() { + CaffeineCacheManager cm = new CaffeineCacheManager("c1"); + Cache cache1 = cm.getCache("c1"); + + cm.setCacheSpecification("maximumSize=10"); + Cache cache1x = cm.getCache("c1"); + assertTrue(cache1x != cache1); + } + @Test public void changeCacheLoaderRecreateCache() { CaffeineCacheManager cm = new CaffeineCacheManager("c1");