diff --git a/initializr-service/pom.xml b/initializr-service/pom.xml
index d1e9e384..ec055246 100644
--- a/initializr-service/pom.xml
+++ b/initializr-service/pom.xml
@@ -26,6 +26,15 @@
initializr-actuator
+
+ javax.cache
+ cache-api
+
+
+ org.ehcache
+ ehcache
+
+
org.springframework.boot
spring-boot-devtools
diff --git a/initializr-service/src/main/java/io/spring/initializr/service/InitializrService.java b/initializr-service/src/main/java/io/spring/initializr/service/InitializrService.java
index 021e7bae..dc57ce57 100644
--- a/initializr-service/src/main/java/io/spring/initializr/service/InitializrService.java
+++ b/initializr-service/src/main/java/io/spring/initializr/service/InitializrService.java
@@ -23,6 +23,7 @@ import io.spring.initializr.web.project.LegacyStsController;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurerSupport;
@@ -37,6 +38,7 @@ import org.springframework.web.servlet.resource.ResourceUrlProvider;
* @author Stephane Nicoll
*/
@SpringBootApplication
+@EnableCaching
public class InitializrService {
public static void main(String[] args) {
diff --git a/initializr-web/pom.xml b/initializr-web/pom.xml
index de763af3..a5944a07 100644
--- a/initializr-web/pom.xml
+++ b/initializr-web/pom.xml
@@ -19,12 +19,13 @@
org.springframework.boot
- spring-boot-autoconfigure
+ spring-boot-starter-mustache
- org.springframework
- spring-context-support
+ org.springframework.boot
+ spring-boot-starter-cache
+
org.springframework
spring-webmvc
@@ -33,10 +34,6 @@
org.springframework.hateoas
spring-hateoas
-
- com.github.ben-manes.caffeine
- caffeine
-
org.apache.ant
ant
@@ -45,10 +42,11 @@
org.json
json
-
+
- org.springframework.boot
- spring-boot-starter-mustache
+ javax.cache
+ cache-api
+ true
diff --git a/initializr-web/src/main/java/io/spring/initializr/web/autoconfigure/InitializrAutoConfiguration.java b/initializr-web/src/main/java/io/spring/initializr/web/autoconfigure/InitializrAutoConfiguration.java
index 27351dd4..1ba9c259 100644
--- a/initializr-web/src/main/java/io/spring/initializr/web/autoconfigure/InitializrAutoConfiguration.java
+++ b/initializr-web/src/main/java/io/spring/initializr/web/autoconfigure/InitializrAutoConfiguration.java
@@ -17,11 +17,11 @@
package io.spring.initializr.web.autoconfigure;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
-import java.util.concurrent.TimeUnit;
+import javax.cache.configuration.MutableConfiguration;
+import javax.cache.expiry.CreatedExpiryPolicy;
+import javax.cache.expiry.Duration;
-import com.github.benmanes.caffeine.cache.Caffeine;
import io.spring.initializr.generator.ProjectGenerator;
import io.spring.initializr.generator.ProjectRequestPostProcessor;
import io.spring.initializr.generator.ProjectRequestResolver;
@@ -38,15 +38,13 @@ import io.spring.initializr.web.support.DefaultInitializrMetadataProvider;
import io.spring.initializr.web.ui.UiController;
import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration;
+import org.springframework.boot.autoconfigure.cache.JCacheManagerCustomizer;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.bind.RelaxedPropertyResolver;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.cache.Cache;
-import org.springframework.cache.CacheManager;
-import org.springframework.cache.annotation.EnableCaching;
-import org.springframework.cache.caffeine.CaffeineCache;
-import org.springframework.cache.concurrent.ConcurrentMapCache;
-import org.springframework.cache.support.SimpleCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
@@ -65,9 +63,9 @@ import org.springframework.web.servlet.resource.ResourceUrlProvider;
* @author Stephane Nicoll
*/
@Configuration
-@EnableCaching
@EnableConfigurationProperties(InitializrProperties.class)
-public class InitializrAutoConfiguration {
+@AutoConfigureAfter(CacheAutoConfiguration.class)
+public class InitializrAutoConfiguration {
private final List postProcessors;
@@ -144,22 +142,26 @@ public class InitializrAutoConfiguration {
return new DefaultDependencyMetadataProvider();
}
- @Bean
- @ConditionalOnMissingBean
- public CacheManager cacheManager() {
- SimpleCacheManager cacheManager = new SimpleCacheManager();
- cacheManager.setCaches(Arrays.asList(
- createConcurrentMapCache(600L, "initializr"),
- new ConcurrentMapCache("dependency-metadata"),
- new ConcurrentMapCache("project-resources")));
- return cacheManager;
- }
+ @Configuration
+ @ConditionalOnClass(javax.cache.CacheManager.class)
+ static class CacheConfiguration {
+
+ @Bean
+ public JCacheManagerCustomizer initializrCacheManagerCustomizer() {
+ return cm -> {
+ cm.createCache("initializr", config().setExpiryPolicyFactory(
+ CreatedExpiryPolicy.factoryOf(Duration.TEN_MINUTES)));
+ cm.createCache("dependency-metadata", config());
+ cm.createCache("project-resources", config());
+ };
+ }
+
+ private MutableConfiguration