Skip to content

Latest commit

 

History

History
100 lines (66 loc) · 3.8 KB

File metadata and controls

100 lines (66 loc) · 3.8 KB

Spring Boot Cache Sample

This sample demonstrates the caching auto-configuration support. Spring’s caching abstraction is supported by many caching libraries, including:

  • Any compliant JSR-107 (JCache) provider

  • EhCache

  • Hazelcast

  • Infinispan

  • Couchbase

  • Redis

  • Caffeine

  • Simple provider based on ConcurrentHashMap

  • Generic provider based on org.springframework.Cache bean definition(s)

The sample defines a simple CountryService that caches countries by ISO code. When the application starts a client invokes the service with a random code every 500ms. You can look at the /metrics endpoint to review the cache statistics if your chosen caching provider is supported.

Using the JSR-107 annotations

The sample uses Spring’s cache annotation. If you want to use the JSR-107 annotations instead, simply add the javax.cache:cache-api dependency to the project. No further configuration is necessary.

Note
You can use the JSR-107 annotations with any cache provider; a JSR-107 compliant cache provider is not necessary.

Using a different cache provider

Initially, the project does not define any caching library so the abstraction works on simple ConcurrentHashMap-based caches. You can try out your favorite caching library as explained below.

JCache (JSR-107)

If you want to configure your cache infrastructure via the standard, you need a compliant implementation and the JSR-107 api. You first need to add javax.cache:cache-api to your project. Then you could try the following:

  • EhCache 3: add org.ehcache:ehcache

  • Hazelcast: add com.hazelcast:hazelcast

  • Infinispan: add org.infinispan:infinispan-jcache

Tip
Certain cache providers do not create a default cache on-the-fly if it does not exist so you might need to update the sample to create the caches on startup or specify the location to the provider-specific file via the spring.cache.jcache.config property.
Note
Any other JSR-107 compliant provider is also supported but Spring Boot may not offer a dependency management entry for it. You will have to add it with the version of the library that you want to use.

EhCache 2.x

Simply add the net.sf.ehcache:ehcache dependency to the project. Since there is a default ehcache.xml configuration file at the root of the classpath, it is automatically used to configure the underlying CacheManager. Note that EhCache 3 uses a different format and doesn’t default to ehcache.xml anymore. Check the documentation for more details.

Hazelcast

Both com.hazelcast:hazelcast and com.hazelcast:hazelcast-spring should be added to the project to enable support for Hazelcast. Since there is a default hazelcast.xml configuration file at the root of the classpath, it is used to automatically configure the underlying HazelcastInstance.

Infinispan

Add the org.infinispan:infinispan-spring4-embedded dependency to enable support for Infinispan. There is no default location that Infinispan uses to look for a config file so if you don’t specify anything it will bootstrap on a hardcoded default. You can set the spring.cache.infinispan.config property to use the provided infinispan.xml configuration instead.

Couchbase

Add the java-client and couchbase-spring-cache dependencies and make sure that you have setup at least a spring.couchbase.bootstrap-hosts property.

Redis

Add the spring-boot-starter-data-redis and make sure it is configured properly (by default, a redis instance with the default settings is expected on your local box).

Caffeine

Simply add the com.github.ben-manes.caffeine:caffeine dependency to enable support for Caffeine. You can customize how caches are created in different ways, see application.properties for an example and the documentation for more details.