parent
ef02cc9bff
commit
64bf33038d
|
|
@ -80,7 +80,6 @@ dependencies {
|
||||||
optional("jakarta.persistence:jakarta.persistence-api")
|
optional("jakarta.persistence:jakarta.persistence-api")
|
||||||
optional("jakarta.servlet:jakarta.servlet-api")
|
optional("jakarta.servlet:jakarta.servlet-api")
|
||||||
optional("javax.cache:cache-api")
|
optional("javax.cache:cache-api")
|
||||||
optional("net.sf.ehcache:ehcache")
|
|
||||||
optional("org.apache.activemq:activemq-broker") {
|
optional("org.apache.activemq:activemq-broker") {
|
||||||
exclude group: "org.apache.geronimo.specs", module: "geronimo-jms_1.1_spec"
|
exclude group: "org.apache.geronimo.specs", module: "geronimo-jms_1.1_spec"
|
||||||
exclude group: "org.apache.geronimo.specs", module: "geronimo-j2ee-management_1.1_spec"
|
exclude group: "org.apache.geronimo.specs", module: "geronimo-j2ee-management_1.1_spec"
|
||||||
|
|
|
||||||
|
|
@ -19,17 +19,14 @@ package org.springframework.boot.actuate.autoconfigure.metrics.cache;
|
||||||
import com.hazelcast.core.Hazelcast;
|
import com.hazelcast.core.Hazelcast;
|
||||||
import com.hazelcast.spring.cache.HazelcastCache;
|
import com.hazelcast.spring.cache.HazelcastCache;
|
||||||
import io.micrometer.core.instrument.binder.MeterBinder;
|
import io.micrometer.core.instrument.binder.MeterBinder;
|
||||||
import net.sf.ehcache.Ehcache;
|
|
||||||
|
|
||||||
import org.springframework.boot.actuate.metrics.cache.CacheMeterBinderProvider;
|
import org.springframework.boot.actuate.metrics.cache.CacheMeterBinderProvider;
|
||||||
import org.springframework.boot.actuate.metrics.cache.CaffeineCacheMeterBinderProvider;
|
import org.springframework.boot.actuate.metrics.cache.CaffeineCacheMeterBinderProvider;
|
||||||
import org.springframework.boot.actuate.metrics.cache.EhCache2CacheMeterBinderProvider;
|
|
||||||
import org.springframework.boot.actuate.metrics.cache.HazelcastCacheMeterBinderProvider;
|
import org.springframework.boot.actuate.metrics.cache.HazelcastCacheMeterBinderProvider;
|
||||||
import org.springframework.boot.actuate.metrics.cache.JCacheCacheMeterBinderProvider;
|
import org.springframework.boot.actuate.metrics.cache.JCacheCacheMeterBinderProvider;
|
||||||
import org.springframework.boot.actuate.metrics.cache.RedisCacheMeterBinderProvider;
|
import org.springframework.boot.actuate.metrics.cache.RedisCacheMeterBinderProvider;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
import org.springframework.cache.caffeine.CaffeineCache;
|
import org.springframework.cache.caffeine.CaffeineCache;
|
||||||
import org.springframework.cache.ehcache.EhCacheCache;
|
|
||||||
import org.springframework.cache.jcache.JCacheCache;
|
import org.springframework.cache.jcache.JCacheCache;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
@ -55,17 +52,6 @@ class CacheMeterBinderProvidersConfiguration {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Configuration(proxyBeanMethods = false)
|
|
||||||
@ConditionalOnClass({ EhCacheCache.class, Ehcache.class })
|
|
||||||
static class EhCache2CacheMeterBinderProviderConfiguration {
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
EhCache2CacheMeterBinderProvider ehCache2CacheMeterBinderProvider() {
|
|
||||||
return new EhCache2CacheMeterBinderProvider();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Configuration(proxyBeanMethods = false)
|
@Configuration(proxyBeanMethods = false)
|
||||||
@ConditionalOnClass({ HazelcastCache.class, Hazelcast.class })
|
@ConditionalOnClass({ HazelcastCache.class, Hazelcast.class })
|
||||||
static class HazelcastCacheMeterBinderProviderConfiguration {
|
static class HazelcastCacheMeterBinderProviderConfiguration {
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,6 @@ dependencies {
|
||||||
}
|
}
|
||||||
optional("javax.cache:cache-api")
|
optional("javax.cache:cache-api")
|
||||||
optional("jakarta.jms:jakarta.jms-api")
|
optional("jakarta.jms:jakarta.jms-api")
|
||||||
optional("net.sf.ehcache:ehcache")
|
|
||||||
optional("org.apache.solr:solr-solrj") {
|
optional("org.apache.solr:solr-solrj") {
|
||||||
exclude group: "org.slf4j", module: "jcl-over-slf4j"
|
exclude group: "org.slf4j", module: "jcl-over-slf4j"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2012-2019 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.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.springframework.boot.actuate.metrics.cache;
|
|
||||||
|
|
||||||
import io.micrometer.core.instrument.Tag;
|
|
||||||
import io.micrometer.core.instrument.binder.MeterBinder;
|
|
||||||
import io.micrometer.core.instrument.binder.cache.EhCache2Metrics;
|
|
||||||
|
|
||||||
import org.springframework.cache.ehcache.EhCacheCache;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@link CacheMeterBinderProvider} implementation for EhCache2.
|
|
||||||
*
|
|
||||||
* @author Stephane Nicoll
|
|
||||||
* @since 2.0.0
|
|
||||||
*/
|
|
||||||
public class EhCache2CacheMeterBinderProvider implements CacheMeterBinderProvider<EhCacheCache> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public MeterBinder getMeterBinder(EhCacheCache cache, Iterable<Tag> tags) {
|
|
||||||
return new EhCache2Metrics(cache.getNativeCache(), tags);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,57 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2012-2019 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.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.springframework.boot.actuate.metrics.cache;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
|
|
||||||
import io.micrometer.core.instrument.binder.MeterBinder;
|
|
||||||
import io.micrometer.core.instrument.binder.cache.EhCache2Metrics;
|
|
||||||
import net.sf.ehcache.Cache;
|
|
||||||
import net.sf.ehcache.CacheManager;
|
|
||||||
import net.sf.ehcache.config.CacheConfiguration;
|
|
||||||
import net.sf.ehcache.config.Configuration;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
|
|
||||||
import org.springframework.cache.ehcache.EhCacheCache;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests for {@link EhCache2CacheMeterBinderProvider}.
|
|
||||||
*
|
|
||||||
* @author Stephane Nicoll
|
|
||||||
*/
|
|
||||||
class EhCache2CacheMeterBinderProviderTests {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void ehCache2CacheProvider() {
|
|
||||||
CacheManager cacheManager = new CacheManager(
|
|
||||||
new Configuration().name("EhCacheCacheTests").defaultCache(new CacheConfiguration("default", 100)));
|
|
||||||
try {
|
|
||||||
Cache nativeCache = new Cache(new CacheConfiguration("test", 100));
|
|
||||||
cacheManager.addCache(nativeCache);
|
|
||||||
EhCacheCache cache = new EhCacheCache(nativeCache);
|
|
||||||
MeterBinder meterBinder = new EhCache2CacheMeterBinderProvider().getMeterBinder(cache,
|
|
||||||
Collections.emptyList());
|
|
||||||
assertThat(meterBinder).isInstanceOf(EhCache2Metrics.class);
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
cacheManager.shutdown();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -51,7 +51,6 @@ dependencies {
|
||||||
optional("jakarta.ws.rs:jakarta.ws.rs-api")
|
optional("jakarta.ws.rs:jakarta.ws.rs-api")
|
||||||
optional("javax.cache:cache-api")
|
optional("javax.cache:cache-api")
|
||||||
optional("javax.money:money-api")
|
optional("javax.money:money-api")
|
||||||
optional("net.sf.ehcache:ehcache")
|
|
||||||
optional("org.apache.activemq:activemq-broker") {
|
optional("org.apache.activemq:activemq-broker") {
|
||||||
exclude group: "org.apache.geronimo.specs", module: "geronimo-j2ee-management_1.1_spec"
|
exclude group: "org.apache.geronimo.specs", module: "geronimo-j2ee-management_1.1_spec"
|
||||||
exclude group: "org.apache.geronimo.specs", module: "geronimo-jms_1.1_spec"
|
exclude group: "org.apache.geronimo.specs", module: "geronimo-jms_1.1_spec"
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,6 @@ final class CacheConfigurations {
|
||||||
static {
|
static {
|
||||||
Map<CacheType, String> mappings = new EnumMap<>(CacheType.class);
|
Map<CacheType, String> mappings = new EnumMap<>(CacheType.class);
|
||||||
mappings.put(CacheType.GENERIC, GenericCacheConfiguration.class.getName());
|
mappings.put(CacheType.GENERIC, GenericCacheConfiguration.class.getName());
|
||||||
mappings.put(CacheType.EHCACHE, EhCacheCacheConfiguration.class.getName());
|
|
||||||
mappings.put(CacheType.HAZELCAST, HazelcastCacheConfiguration.class.getName());
|
mappings.put(CacheType.HAZELCAST, HazelcastCacheConfiguration.class.getName());
|
||||||
mappings.put(CacheType.INFINISPAN, InfinispanCacheConfiguration.class.getName());
|
mappings.put(CacheType.INFINISPAN, InfinispanCacheConfiguration.class.getName());
|
||||||
mappings.put(CacheType.JCACHE, JCacheCacheConfiguration.class.getName());
|
mappings.put(CacheType.JCACHE, JCacheCacheConfiguration.class.getName());
|
||||||
|
|
|
||||||
|
|
@ -50,8 +50,6 @@ public class CacheProperties {
|
||||||
|
|
||||||
private final Couchbase couchbase = new Couchbase();
|
private final Couchbase couchbase = new Couchbase();
|
||||||
|
|
||||||
private final EhCache ehcache = new EhCache();
|
|
||||||
|
|
||||||
private final Infinispan infinispan = new Infinispan();
|
private final Infinispan infinispan = new Infinispan();
|
||||||
|
|
||||||
private final JCache jcache = new JCache();
|
private final JCache jcache = new JCache();
|
||||||
|
|
@ -82,10 +80,6 @@ public class CacheProperties {
|
||||||
return this.couchbase;
|
return this.couchbase;
|
||||||
}
|
}
|
||||||
|
|
||||||
public EhCache getEhcache() {
|
|
||||||
return this.ehcache;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Infinispan getInfinispan() {
|
public Infinispan getInfinispan() {
|
||||||
return this.infinispan;
|
return this.infinispan;
|
||||||
}
|
}
|
||||||
|
|
@ -156,26 +150,6 @@ public class CacheProperties {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* EhCache specific cache properties.
|
|
||||||
*/
|
|
||||||
public static class EhCache {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The location of the configuration file to use to initialize EhCache.
|
|
||||||
*/
|
|
||||||
private Resource config;
|
|
||||||
|
|
||||||
public Resource getConfig() {
|
|
||||||
return this.config;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setConfig(Resource config) {
|
|
||||||
this.config = config;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Infinispan specific cache properties.
|
* Infinispan specific cache properties.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -36,11 +36,6 @@ public enum CacheType {
|
||||||
*/
|
*/
|
||||||
JCACHE,
|
JCACHE,
|
||||||
|
|
||||||
/**
|
|
||||||
* EhCache backed caching.
|
|
||||||
*/
|
|
||||||
EHCACHE,
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hazelcast backed caching.
|
* Hazelcast backed caching.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,74 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2012-2019 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.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.springframework.boot.autoconfigure.cache;
|
|
||||||
|
|
||||||
import net.sf.ehcache.Cache;
|
|
||||||
import net.sf.ehcache.CacheManager;
|
|
||||||
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ResourceCondition;
|
|
||||||
import org.springframework.cache.ehcache.EhCacheCacheManager;
|
|
||||||
import org.springframework.cache.ehcache.EhCacheManagerUtils;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.context.annotation.Conditional;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
import org.springframework.core.io.Resource;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* EhCache cache configuration. Only kick in if a configuration file location is set or if
|
|
||||||
* a default configuration file exists.
|
|
||||||
*
|
|
||||||
* @author Eddú Meléndez
|
|
||||||
* @author Stephane Nicoll
|
|
||||||
* @author Madhura Bhave
|
|
||||||
*/
|
|
||||||
@Configuration(proxyBeanMethods = false)
|
|
||||||
@ConditionalOnClass({ Cache.class, EhCacheCacheManager.class })
|
|
||||||
@ConditionalOnMissingBean(org.springframework.cache.CacheManager.class)
|
|
||||||
@Conditional({ CacheCondition.class, EhCacheCacheConfiguration.ConfigAvailableCondition.class })
|
|
||||||
class EhCacheCacheConfiguration {
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
EhCacheCacheManager cacheManager(CacheManagerCustomizers customizers, CacheManager ehCacheCacheManager) {
|
|
||||||
return customizers.customize(new EhCacheCacheManager(ehCacheCacheManager));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
@ConditionalOnMissingBean
|
|
||||||
CacheManager ehCacheCacheManager(CacheProperties cacheProperties) {
|
|
||||||
Resource location = cacheProperties.resolveConfigLocation(cacheProperties.getEhcache().getConfig());
|
|
||||||
if (location != null) {
|
|
||||||
return EhCacheManagerUtils.buildCacheManager(location);
|
|
||||||
}
|
|
||||||
return EhCacheManagerUtils.buildCacheManager();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if the EhCache configuration is available. This either kick in if a
|
|
||||||
* default configuration has been found or if property referring to the file to use
|
|
||||||
* has been set.
|
|
||||||
*/
|
|
||||||
static class ConfigAvailableCondition extends ResourceCondition {
|
|
||||||
|
|
||||||
ConfigAvailableCondition() {
|
|
||||||
super("EhCache", "spring.cache.ehcache.config", "classpath:/ehcache.xml");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -31,7 +31,6 @@ import org.springframework.boot.test.context.runner.ContextConsumer;
|
||||||
import org.springframework.cache.CacheManager;
|
import org.springframework.cache.CacheManager;
|
||||||
import org.springframework.cache.caffeine.CaffeineCacheManager;
|
import org.springframework.cache.caffeine.CaffeineCacheManager;
|
||||||
import org.springframework.cache.concurrent.ConcurrentMapCacheManager;
|
import org.springframework.cache.concurrent.ConcurrentMapCacheManager;
|
||||||
import org.springframework.cache.ehcache.EhCacheCacheManager;
|
|
||||||
import org.springframework.cache.support.SimpleCacheManager;
|
import org.springframework.cache.support.SimpleCacheManager;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
@ -114,13 +113,6 @@ abstract class AbstractCacheAutoConfigurationTests {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
|
||||||
CacheManagerCustomizer<EhCacheCacheManager> ehcacheCacheManagerCustomizer() {
|
|
||||||
return new CacheManagerTestCustomizer<EhCacheCacheManager>() {
|
|
||||||
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
CacheManagerCustomizer<HazelcastCacheManager> hazelcastCacheManagerCustomizer() {
|
CacheManagerCustomizer<HazelcastCacheManager> hazelcastCacheManagerCustomizer() {
|
||||||
return new CacheManagerTestCustomizer<HazelcastCacheManager>() {
|
return new CacheManagerTestCustomizer<HazelcastCacheManager>() {
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,6 @@ import com.hazelcast.cache.impl.HazelcastServerCachingProvider;
|
||||||
import com.hazelcast.core.Hazelcast;
|
import com.hazelcast.core.Hazelcast;
|
||||||
import com.hazelcast.core.HazelcastInstance;
|
import com.hazelcast.core.HazelcastInstance;
|
||||||
import com.hazelcast.spring.cache.HazelcastCacheManager;
|
import com.hazelcast.spring.cache.HazelcastCacheManager;
|
||||||
import net.sf.ehcache.Status;
|
|
||||||
import org.infinispan.configuration.cache.ConfigurationBuilder;
|
import org.infinispan.configuration.cache.ConfigurationBuilder;
|
||||||
import org.infinispan.jcache.embedded.JCachingProvider;
|
import org.infinispan.jcache.embedded.JCachingProvider;
|
||||||
import org.infinispan.spring.embedded.provider.SpringEmbeddedCacheManager;
|
import org.infinispan.spring.embedded.provider.SpringEmbeddedCacheManager;
|
||||||
|
|
@ -837,20 +836,6 @@ class CacheAutoConfigurationTests extends AbstractCacheAutoConfigurationTests {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Configuration(proxyBeanMethods = false)
|
|
||||||
@EnableCaching
|
|
||||||
static class EhCacheCustomCacheManager {
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
net.sf.ehcache.CacheManager customEhCacheCacheManager() {
|
|
||||||
net.sf.ehcache.CacheManager cacheManager = mock(net.sf.ehcache.CacheManager.class);
|
|
||||||
given(cacheManager.getStatus()).willReturn(Status.STATUS_ALIVE);
|
|
||||||
given(cacheManager.getCacheNames()).willReturn(new String[0]);
|
|
||||||
return cacheManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Configuration(proxyBeanMethods = false)
|
@Configuration(proxyBeanMethods = false)
|
||||||
@EnableCaching
|
@EnableCaching
|
||||||
static class HazelcastCustomHazelcastInstance {
|
static class HazelcastCustomHazelcastInstance {
|
||||||
|
|
|
||||||
|
|
@ -1,81 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2012-2019 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.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.springframework.boot.autoconfigure.cache;
|
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
|
|
||||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
|
||||||
import org.springframework.boot.autoconfigure.cache.CacheAutoConfigurationTests.DefaultCacheAndCustomizersConfiguration;
|
|
||||||
import org.springframework.boot.autoconfigure.cache.CacheAutoConfigurationTests.DefaultCacheConfiguration;
|
|
||||||
import org.springframework.boot.autoconfigure.cache.CacheAutoConfigurationTests.EhCacheCustomCacheManager;
|
|
||||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
|
||||||
import org.springframework.boot.testsupport.classpath.ClassPathExclusions;
|
|
||||||
import org.springframework.cache.ehcache.EhCacheCacheManager;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests for {@link CacheAutoConfiguration} with EhCache 2.
|
|
||||||
*
|
|
||||||
* @author Stephane Nicoll
|
|
||||||
* @author Andy Wilkinson
|
|
||||||
*/
|
|
||||||
@ClassPathExclusions("ehcache-3*.jar")
|
|
||||||
class EhCache2CacheAutoConfigurationTests extends AbstractCacheAutoConfigurationTests {
|
|
||||||
|
|
||||||
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
|
|
||||||
.withConfiguration(AutoConfigurations.of(CacheAutoConfiguration.class));
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void ehCacheWithCaches() {
|
|
||||||
this.contextRunner.withUserConfiguration(DefaultCacheConfiguration.class)
|
|
||||||
.withPropertyValues("spring.cache.type=ehcache").run((context) -> {
|
|
||||||
EhCacheCacheManager cacheManager = getCacheManager(context, EhCacheCacheManager.class);
|
|
||||||
assertThat(cacheManager.getCacheNames()).containsOnly("cacheTest1", "cacheTest2");
|
|
||||||
assertThat(context.getBean(net.sf.ehcache.CacheManager.class))
|
|
||||||
.isEqualTo(cacheManager.getCacheManager());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void ehCacheWithCustomizers() {
|
|
||||||
this.contextRunner.withUserConfiguration(DefaultCacheAndCustomizersConfiguration.class)
|
|
||||||
.withPropertyValues("spring.cache.type=ehcache")
|
|
||||||
.run(verifyCustomizers("allCacheManagerCustomizer", "ehcacheCacheManagerCustomizer"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void ehCacheWithConfig() {
|
|
||||||
this.contextRunner.withUserConfiguration(DefaultCacheConfiguration.class)
|
|
||||||
.withPropertyValues("spring.cache.type=ehcache",
|
|
||||||
"spring.cache.ehcache.config=cache/ehcache-override.xml")
|
|
||||||
.run((context) -> {
|
|
||||||
EhCacheCacheManager cacheManager = getCacheManager(context, EhCacheCacheManager.class);
|
|
||||||
assertThat(cacheManager.getCacheNames()).containsOnly("cacheOverrideTest1", "cacheOverrideTest2");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void ehCacheWithExistingCacheManager() {
|
|
||||||
this.contextRunner.withUserConfiguration(EhCacheCustomCacheManager.class)
|
|
||||||
.withPropertyValues("spring.cache.type=ehcache").run((context) -> {
|
|
||||||
EhCacheCacheManager cacheManager = getCacheManager(context, EhCacheCacheManager.class);
|
|
||||||
assertThat(cacheManager.getCacheManager()).isEqualTo(context.getBean("customEhCacheCacheManager"));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -257,13 +257,6 @@ bom {
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
library("Ehcache", "2.10.9.2") {
|
|
||||||
group("net.sf.ehcache") {
|
|
||||||
modules = [
|
|
||||||
"ehcache"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
library("Ehcache3", "3.9.7") {
|
library("Ehcache3", "3.9.7") {
|
||||||
group("org.ehcache") {
|
group("org.ehcache") {
|
||||||
modules = [
|
modules = [
|
||||||
|
|
|
||||||
|
|
@ -860,7 +860,6 @@ Additional, cache-specific metrics are also available.
|
||||||
The following cache libraries are supported:
|
The following cache libraries are supported:
|
||||||
|
|
||||||
* Caffeine
|
* Caffeine
|
||||||
* EhCache 2
|
|
||||||
* Hazelcast
|
* Hazelcast
|
||||||
* Any compliant JCache (JSR-107) implementation
|
* Any compliant JCache (JSR-107) implementation
|
||||||
* Redis
|
* Redis
|
||||||
|
|
|
||||||
|
|
@ -277,7 +277,6 @@ boot-features-caching=features.caching
|
||||||
boot-features-caching-provider=features.caching.provider
|
boot-features-caching-provider=features.caching.provider
|
||||||
boot-features-caching-provider-generic=features.caching.provider.generic
|
boot-features-caching-provider-generic=features.caching.provider.generic
|
||||||
boot-features-caching-provider-jcache=features.caching.provider.jcache
|
boot-features-caching-provider-jcache=features.caching.provider.jcache
|
||||||
boot-features-caching-provider-ehcache2=features.caching.provider.ehcache2
|
|
||||||
boot-features-caching-provider-hazelcast=features.caching.provider.hazelcast
|
boot-features-caching-provider-hazelcast=features.caching.provider.hazelcast
|
||||||
boot-features-caching-provider-infinispan=features.caching.provider.infinispan
|
boot-features-caching-provider-infinispan=features.caching.provider.infinispan
|
||||||
boot-features-caching-provider-couchbase=features.caching.provider.couchbase
|
boot-features-caching-provider-couchbase=features.caching.provider.couchbase
|
||||||
|
|
@ -784,7 +783,6 @@ features.caching=io.caching
|
||||||
features.caching.provider=io.caching.provider
|
features.caching.provider=io.caching.provider
|
||||||
features.caching.provider.generic=io.caching.provider.generic
|
features.caching.provider.generic=io.caching.provider.generic
|
||||||
features.caching.provider.jcache=io.caching.provider.jcache
|
features.caching.provider.jcache=io.caching.provider.jcache
|
||||||
features.caching.provider.ehcache2=io.caching.provider.ehcache2
|
|
||||||
features.caching.provider.hazelcast=io.caching.provider.hazelcast
|
features.caching.provider.hazelcast=io.caching.provider.hazelcast
|
||||||
features.caching.provider.infinispan=io.caching.provider.infinispan
|
features.caching.provider.infinispan=io.caching.provider.infinispan
|
||||||
features.caching.provider.couchbase=io.caching.provider.couchbase
|
features.caching.provider.couchbase=io.caching.provider.couchbase
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,6 @@ If you have not defined a bean of type `CacheManager` or a `CacheResolver` named
|
||||||
|
|
||||||
. <<io#io.caching.provider.generic,Generic>>
|
. <<io#io.caching.provider.generic,Generic>>
|
||||||
. <<io#io.caching.provider.jcache,JCache (JSR-107)>> (EhCache 3, Hazelcast, Infinispan, and others)
|
. <<io#io.caching.provider.jcache,JCache (JSR-107)>> (EhCache 3, Hazelcast, Infinispan, and others)
|
||||||
. <<io#io.caching.provider.ehcache2,EhCache 2.x>>
|
|
||||||
. <<io#io.caching.provider.hazelcast,Hazelcast>>
|
. <<io#io.caching.provider.hazelcast,Hazelcast>>
|
||||||
. <<io#io.caching.provider.infinispan,Infinispan>>
|
. <<io#io.caching.provider.infinispan,Infinispan>>
|
||||||
. <<io#io.caching.provider.couchbase,Couchbase>>
|
. <<io#io.caching.provider.couchbase,Couchbase>>
|
||||||
|
|
@ -54,7 +53,7 @@ Use this property if you need to <<io#io.caching.provider.none,disable caching a
|
||||||
|
|
||||||
TIP: Use the `spring-boot-starter-cache` "`Starter`" to quickly add basic caching dependencies.
|
TIP: Use the `spring-boot-starter-cache` "`Starter`" to quickly add basic caching dependencies.
|
||||||
The starter brings in `spring-context-support`.
|
The starter brings in `spring-context-support`.
|
||||||
If you add dependencies manually, you must include `spring-context-support` in order to use the JCache, EhCache 2.x, or Caffeine support.
|
If you add dependencies manually, you must include `spring-context-support` in order to use the JCache or Caffeine support.
|
||||||
|
|
||||||
If the `CacheManager` is auto-configured by Spring Boot, you can further tune its configuration before it is fully initialized by exposing a bean that implements the `CacheManagerCustomizer` interface.
|
If the `CacheManager` is auto-configured by Spring Boot, you can further tune its configuration before it is fully initialized by exposing a bean that implements the `CacheManagerCustomizer` interface.
|
||||||
The following example sets a flag to say that `null` values should be passed down to the underlying map:
|
The following example sets a flag to say that `null` values should be passed down to the underlying map:
|
||||||
|
|
@ -112,22 +111,6 @@ No further customization is applied to it.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[[io.caching.provider.ehcache2]]
|
|
||||||
==== EhCache 2.x
|
|
||||||
https://www.ehcache.org/[EhCache] 2.x is used if a file named `ehcache.xml` can be found at the root of the classpath.
|
|
||||||
If EhCache 2.x is found, the `EhCacheCacheManager` provided by the `spring-boot-starter-cache` "`Starter`" is used to bootstrap the cache manager.
|
|
||||||
An alternate configuration file can be provided as well, as shown in the following example:
|
|
||||||
|
|
||||||
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
|
|
||||||
----
|
|
||||||
spring:
|
|
||||||
cache:
|
|
||||||
ehcache:
|
|
||||||
config: "classpath:config/another-config.xml"
|
|
||||||
----
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[[io.caching.provider.hazelcast]]
|
[[io.caching.provider.hazelcast]]
|
||||||
==== Hazelcast
|
==== Hazelcast
|
||||||
Spring Boot has <<io#io.hazelcast,general support for Hazelcast>>.
|
Spring Boot has <<io#io.hazelcast,general support for Hazelcast>>.
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,6 @@ def caches = [
|
||||||
"javax.cache:cache-api",
|
"javax.cache:cache-api",
|
||||||
"org.ehcache:ehcache"
|
"org.ehcache:ehcache"
|
||||||
],
|
],
|
||||||
"ehcache2": [
|
|
||||||
"net.sf.ehcache:ehcache"
|
|
||||||
],
|
|
||||||
"hazelcast": [
|
"hazelcast": [
|
||||||
"com.hazelcast:hazelcast",
|
"com.hazelcast:hazelcast",
|
||||||
"com.hazelcast:hazelcast-spring"
|
"com.hazelcast:hazelcast-spring"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue