Springboot 集成 Ehcache 提示 Cannot find cache named ‘employee_all‘ for Builder

异常提示:

java.lang.IllegalArgumentException: Cannot find cache named 'employee_all' for Builder[public java.lang.Iterable org.bc.device.service.EmployeeService.findAll()] caches=[employee_all] | key='' | keyGenerator='keyGenerator' | cacheManager='' | cacheResolver='' | condition='' | unless='' | sync='false'
	at org.springframework.cache.interceptor.AbstractCacheResolver.resolveCaches(AbstractCacheResolver.java:92) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.cache.interceptor.CacheAspectSupport.getCaches(CacheAspectSupport.java:253) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.cache.interceptor.CacheAspectSupport$CacheOperationContext.<init>(CacheAspectSupport.java:708) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.cache.interceptor.CacheAspectSupport.getOperationContext(CacheAspectSupport.java:266) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.cache.interceptor.CacheAspectSupport$CacheOperationContexts.<init>(CacheAspectSupport.java:599) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:346) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.cache.interceptor.CacheInterceptor.invoke(CacheInterceptor.java:61) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691) ~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.bc.device.service.EmployeeService$$EnhancerBySpringCGLIB$$6d1249ea.findAll(<generated>) ~[classes/:na]
	at org.bc.device.controller.EmployeeController.findAll(EmployeeController.java:26) ~[classes/:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.37.jar:4.0.FR]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.37.jar:4.0.FR]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.37.jar:9.0.37]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
	at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]


解决方案
显示的是没有找到这个缓存空间,出现该问题其实还是配置文件的事情,在ehcache的配置文件中,需要配置缓存空间。这里的name就是你的缓存空间的名称,要与你@Cacheable中的value一致

原来的:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">

    <!--
     磁盘存储:将缓存中暂时不使用的对象,转移到硬盘,类似于Windows系统的虚拟内存
     path:指定在硬盘上存储对象的路径
     path可以配置的目录有:
     user.home(用户的家目录)
     user.dir(用户当前的工作目录)
     java.io.tmpdir(默认的临时目录)
     ehcache.disk.store.dir(ehcache的配置目录)
     绝对路径(如:d:\\ehcache)
     查看路径方法:String tmpDir = System.getProperty("java.io.tmpdir");
     -->
    <diskStore path="java.io.tmpdir" />

    <!--
     defaultCache:默认的缓存配置信息,如果不加特殊说明,则所有对象按照此配置项处理
     maxElementsInMemory:设置了缓存的上限,最多存储多少个记录对象
     eternal:代表对象是否永不过期 (指定true则下面两项配置需为0无限期)
     timeToIdleSeconds:最大的发呆时间 /秒
     timeToLiveSeconds:最大的存活时间 /秒
     overflowToDisk:是否允许对象被写入到磁盘
     说明:下列配置自缓存建立起600秒(10分钟)有效 。
     在有效的600秒(10分钟)内,如果连续120秒(2分钟)未访问缓存,则缓存失效。
     就算有访问,也只会存活600秒。
     -->
    <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="600"
                  timeToLiveSeconds="600" overflowToDisk="true" />

    <!--
     maxElementsInMemory,内存缓存中最多可以存放的元素数量,若放入Cache中的元素超过这个数值,则有以下两种情况
          1)若overflowToDisk=true,则会将Cache中多出的元素放入磁盘文件中
          2)若overflowToDisk=false,则根据memoryStoreEvictionPolicy策略替换Cache中原有的元素
     eternal,   缓存中对象是否永久有效
     timeToIdleSeconds, 缓存数据在失效前的允许闲置时间(单位:秒),仅当eternal=false时使用,默认值是0表示可闲置时间无穷大,若超过这个时间没有访问此Cache中的某个元素,那么此元素将被从Cache中清除
     timeToLiveSeconds, 缓存数据的总的存活时间(单位:秒),仅当eternal=false时使用,从创建开始计时,失效结束
     maxElementsOnDisk, 磁盘缓存中最多可以存放的元素数量,0表示无穷大
     overflowToDisk,  内存不足时,是否启用磁盘缓存
     diskExpiryThreadIntervalSeconds, 磁盘缓存的清理线程运行间隔,默认是120秒
     memoryStoreEvictionPolicy, 内存存储与释放策略,即达到maxElementsInMemory限制时,Ehcache会根据指定策略清理内存 共有三种策略,分别为LRU(最近最少使用)、LFU(最常用的)、FIFO(先进先出)
    -->
    <!-- 默认缓存 -->
    <defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            overflowToDisk="false"
            diskSpoolBufferSizeMB="50"
            timeToIdleSeconds="300"
            timeToLiveSeconds="600"
            maxElementsOnDisk="10000000"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU">

        <persistence strategy="localTempSwap"/>
    </defaultCache>
</ehcache>


改成:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">

    <!--
     磁盘存储:将缓存中暂时不使用的对象,转移到硬盘,类似于Windows系统的虚拟内存
     path:指定在硬盘上存储对象的路径
     path可以配置的目录有:
     user.home(用户的家目录)
     user.dir(用户当前的工作目录)
     java.io.tmpdir(默认的临时目录)
     ehcache.disk.store.dir(ehcache的配置目录)
     绝对路径(如:d:\\ehcache)
     查看路径方法:String tmpDir = System.getProperty("java.io.tmpdir");
     -->
    <diskStore path="java.io.tmpdir" />

    <!--
     defaultCache:默认的缓存配置信息,如果不加特殊说明,则所有对象按照此配置项处理
     maxElementsInMemory:设置了缓存的上限,最多存储多少个记录对象
     eternal:代表对象是否永不过期 (指定true则下面两项配置需为0无限期)
     timeToIdleSeconds:最大的发呆时间 /秒
     timeToLiveSeconds:最大的存活时间 /秒
     overflowToDisk:是否允许对象被写入到磁盘
     说明:下列配置自缓存建立起600秒(10分钟)有效 。
     在有效的600秒(10分钟)内,如果连续120秒(2分钟)未访问缓存,则缓存失效。
     就算有访问,也只会存活600秒。
     -->
    <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="600"
                  timeToLiveSeconds="600" overflowToDisk="true" />

    <!--
     maxElementsInMemory,内存缓存中最多可以存放的元素数量,若放入Cache中的元素超过这个数值,则有以下两种情况
          1)若overflowToDisk=true,则会将Cache中多出的元素放入磁盘文件中
          2)若overflowToDisk=false,则根据memoryStoreEvictionPolicy策略替换Cache中原有的元素
     eternal,   缓存中对象是否永久有效
     timeToIdleSeconds, 缓存数据在失效前的允许闲置时间(单位:秒),仅当eternal=false时使用,默认值是0表示可闲置时间无穷大,若超过这个时间没有访问此Cache中的某个元素,那么此元素将被从Cache中清除
     timeToLiveSeconds, 缓存数据的总的存活时间(单位:秒),仅当eternal=false时使用,从创建开始计时,失效结束
     maxElementsOnDisk, 磁盘缓存中最多可以存放的元素数量,0表示无穷大
     overflowToDisk,  内存不足时,是否启用磁盘缓存
     diskExpiryThreadIntervalSeconds, 磁盘缓存的清理线程运行间隔,默认是120秒
     memoryStoreEvictionPolicy, 内存存储与释放策略,即达到maxElementsInMemory限制时,Ehcache会根据指定策略清理内存 共有三种策略,分别为LRU(最近最少使用)、LFU(最常用的)、FIFO(先进先出)
    -->
    <!-- 默认缓存 -->
    <defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            overflowToDisk="false"
            diskSpoolBufferSizeMB="50"
            timeToIdleSeconds="300"
            timeToLiveSeconds="600"
            maxElementsOnDisk="10000000"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU">

        <persistence strategy="localTempSwap"/>
    </defaultCache>

    <cache name="employee_all"
           maxElementsInMemory="100"
           eternal="false"
           overflowToDisk="true"
           timeToIdleSeconds="300"
           timeToLiveSeconds="600"
           memoryStoreEvictionPolicy="LRU"/>

    <cache name="employee_info"
           maxElementsInMemory="1000"
           eternal="false"
           overflowToDisk="true"
           timeToIdleSeconds="300"
           timeToLiveSeconds="600"
           memoryStoreEvictionPolicy="LRU"/>

</ehcache>

### 回答1: Spring Boot集成Ehcache可以通过以下步骤实现: 1. 添加Ehcache依赖 在pom.xml文件中添加Ehcache依赖: ``` <dependency> <groupId>org.ehcache</groupId> <artifactId>ehcache</artifactId> <version>3.8.1</version> </dependency> ``` 2. 配置Ehcache 在application.properties文件中添加Ehcache配置: ``` # Ehcache配置 spring.cache.type=ehcache spring.cache.ehcache.config=classpath:ehcache.xml ``` 其中,ehcache.xml是Ehcache的配置文件,可以在该文件中配置缓存策略、缓存大小等参数。 3. 使用Ehcache缓存数据 在需要缓存数据的方法上添加@Cacheable注解,指定缓存名称和缓存key: ``` @Cacheable(value = "userCache", key = "#id") public User getUserById(Long id) { // 从数据库中获取用户信息 User user = userRepository.findById(id).orElse(null); return user; } ``` 其中,value属性指定缓存名称,key属性指定缓存key,可以使用SpEL表达式指定key的值。 4. 清除缓存数据 在需要清除缓存数据的方法上添加@CacheEvict注解,指定缓存名称和缓存key: ``` @CacheEvict(value = "userCache", key = "#id") public void deleteUserById(Long id) { // 从数据库中删除用户信息 userRepository.deleteById(id); } ``` 其中,value属性指定缓存名称,key属性指定缓存key,可以使用SpEL表达式指定key的值。 以上就是Spring Boot集成Ehcache的基本步骤,通过使用Ehcache可以提高应用程序的性能和响应速度。 ### 回答2: Spring Boot是一个非常流行的轻量级框架,它简化了Java应用程序的开发。另一方面,Ehcache是一个开源的Java缓存框架,可在我们的应用程序中使用,以提高性能和可伸缩性。当将这两者结合在一起时,我们可以实现一个高性能的应用程序。本文将向您介绍如何在Spring Boot集成Ehcache。 步骤1:添加Ehcache依赖项 首先,我们需要向项目中添加以下Ehcache依赖项: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> </dependency> ``` 步骤2:在应用程序上启用缓存 在application.properties文件中,我们需要添加以下配置以启用缓存: ``` spring.cache.type=ehcache ``` 步骤3:定义缓存 在我们的代码中,我们需要定义缓存。可以使用@Cacheable注释将一个方法声明为可缓存的,也可以使用@CacheEvict注释将一个方法标记为删除缓存的。 例如: ```java @Service public class UserService { @Autowired private UserRepository userRepository; @Cacheable(value = "users", key = "#username") public User getUserByUsername(String username) { return userRepository.findByUsername(username); } @CacheEvict(value = "users", key = "#username") public void deleteUserByUsername(String username) { userRepository.deleteByUsername(username); } } ``` 步骤4:使用缓存 在我们的代码中,我们可以像平常一样使用userService,Spring Boot将自动为我们处理缓存。 例如: ```java @RestController public class UserController { @Autowired private UserService userService; @GetMapping("/users/{username}") public ResponseEntity getUserByUsername(@PathVariable String username) { User user = userService.getUserByUsername(username); return ResponseEntity.ok(user); } @DeleteMapping("/users/{username}") public ResponseEntity deleteUserByUsername(@PathVariable String username) { userService.deleteUserByUsername(username); return ResponseEntity.noContent().build(); } } ``` 总结 在本文中,我们介绍了如何在Spring Boot集成Ehcache。我们了解了如何添加Ehcache依赖项,启用缓存,定义缓存和使用缓存。现在,您应该能够使用Ehcache轻松地优化自己的应用程序。 ### 回答3: Spring Boot是现今非常流行的Java web开发框架,其本质就是一个基于Spring框架的快速开发工具。随着Spring Boot的发展,其内部集成了很多流行的组件,其中也包括了ehcacheehcache是一个广泛使用的Java开源缓存框架,可以提高应用程序的性能和扩展性。 Spring Boot集成ehcache非常容易,在此我们简单介绍一下集成步骤: 1. 在pom.xml文件中添加依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>2.6.11</version> </dependency> ``` 2. 在配置文件application.properties中添加ehcache的相关配置信息: ```properties # 缓存管理器 Ehcache 必须制定一个唯一的名称 spring.cache.cache-names=myCache # ehcache 配置信息 spring.cache.ehcache.config=classpath:ehcache.xml ``` 3. 在配置文件classpath下添加ehcache.xml文件,配置缓存策略。例如如下所示: ```xml <?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" updateCheck="true" monitoring="autodetect" dynamicConfig="true"> <defaultCache maxEntriesLocalHeap="10000" eternal="false" timeToIdleSeconds="3600" timeToLiveSeconds="0" diskSpoolBufferSizeMB="30" maxEntriesLocalDisk="10000000" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" statistics="true"> <persistence strategy="localTempSwap" /> </defaultCache> <cache name="myCache" maxEntriesLocalHeap="1000" maxEntriesLocalDisk="0" eternal="true" timeToIdleSeconds="0" timeToLiveSeconds="0" memoryStoreEvictionPolicy="LRU"> <persistence strategy="none" /> </cache> </ehcache> ``` 4. 创建自定义缓存注解和实现类: ```java @Target({ElementType.TYPE,ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Cacheable(cacheNames = "myCache") public @interface MyCache { } @Component public class MyCacheManager implements CachingConfigurerSupport { @Bean public CacheManager cacheManager() { return new EhCacheCacheManager(ehCacheCacheManager().getObject()); } @Bean public EhCacheManagerFactoryBean ehCacheCacheManager() { EhCacheManagerFactoryBean cmfb = new EhCacheManagerFactoryBean(); cmfb.setConfigLocation(new ClassPathResource("ehcache.xml")); cmfb.setShared(true); return cmfb; } } ``` 5. 修改对应的Controller和Service方法,并添加自定义缓存注解: ```java @Service public class UserService { @MyCache public String getUser(int id) { return "user from db"; } } @RestController public class UserController { @Autowired private UserService userService; @GetMapping("/user/{id}") public String getUser(@PathVariable("id") int id) { return userService.getUser(id); } } ``` 6. 启动应用,测试是否生效。 通过以上6个步骤,我们就成功地将ehcache缓存组件集成到了Spring Boot应用中,并且实现了基于注解的缓存管理。需要注意的是,在添加缓存配置信息时,根据实际需求可自行更改缓存过期时间、缓存数量等相关参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敏捷践行者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值