Spring集成Ehcache[整理]

网络译文:

导言
从 Spring 1.1.1 开始, EHCache 就作为一种通用缓存解决方案集成进 Spring。
我将示范拦截器的例子,它能把方法返回的结果缓存起来。
 
利用 Spring IoC 配置 EHCache
在 Spring 里配置 EHCache 很简单。你只需一个 ehcache.xml 文件,该文件用于配置 EHCache:
< ehcache >

    
<! —设置缓存文件 .data 的创建路径。

         如果该路径是 Java 系统参数,当前虚拟机会重新赋值。

         下面的参数这样解释:
         user.home – 用户主目录
         user.dir      – 用户当前工作目录
         java.io.tmpdir – 默认临时文件路径 --
>
    
< diskStore  path ="java.io.tmpdir" />


    
<! —缺省缓存配置。CacheManager 会把这些配置应用到程序中。

        下列属性是 defaultCache 必须的:

        maxInMemory           - 设定内存中创建对象的最大值。
        eternal                        - 设置元素(译注:内存中对象)是否永久驻留。如果是,将忽略超
                                              时限制且元素永不消亡。
        timeToIdleSeconds  - 设置某个元素消亡前的停顿时间。
                                              也就是在一个元素消亡之前,两次访问时间的最大时间间隔值。
                                              这只能在元素不是永久驻留时有效(译注:如果对象永恒不灭,则
                                              设置该属性也无用)。
                                              如果该值是 0 就意味着元素可以停顿无穷长的时间。
        timeToLiveSeconds - 为元素设置消亡前的生存时间。
                                               也就是一个元素从构建到消亡的最大时间间隔值。
                                               这只能在元素不是永久驻留时有效。
        overflowToDisk        - 设置当内存中缓存达到 maxInMemory 限制时元素是否可写到磁盘
                                               上。
        --
>

    
< cache  name ="org.taha.cache.METHOD_CACHE"
        maxElementsInMemory
="300"
        eternal
="false"
        timeToIdleSeconds
="500"
        timeToLiveSeconds
="500"
        overflowToDisk
="true"
        
/>
</ ehcache >

拦截器将使用 org.taha.cache.METHOD_CACHE区域缓存方法返回结果。下面利用 Spring IoC bean 来访问这一区域。

<!--  ======================   缓存   =======================  -->

< bean  id ="cacheManager"  class ="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" >
  
< property  name ="configLocation" >
    
< value > classpath:ehcache.xml </ value >
  
</ property >
</ bean >

< bean  id ="methodCache"  class ="org.springframework.cache.ehcache.EhCacheFactoryBean" >
  
< property  name ="cacheManager" >
    
< ref  local ="cacheManager" />
  
</ property >
  
< property  name ="cacheName" >
    
< value > org.taha.cache.METHOD_CACHE </ value >
  
</ property >
</ bean >
 
构建我们的 MethodCacheInterceptor
该拦截器实现 org.aopalliance.intercept.MethodInterceptor接口。一旦运行起来(kicks-in),它首先检查被拦截方法是否被配置为可缓存的。这将可选择性的配置想要缓存的 bean 方法。只要调用的方法配置为可缓存,拦截器将为该方法生成 cache key 并检查该方法返回的结果是否已缓存。如果已缓存,就返回缓存的结果,否则再次调用被拦截方法,并缓存结果供下次调用。
 
com.ph.serviceportal.infoboard.util.MethodCacheInterceptor
 
package  com.ph.serviceportal.infoboard.util;

import  java.io.Serializable;

import  net.sf.ehcache.Cache;
import  net.sf.ehcache.Element;

import  org.aopalliance.intercept.MethodInterceptor;
import  org.aopalliance.intercept.MethodInvocation;
import
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答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应用中,并且实现了基于注解的缓存管理。需要注意的是,在添加缓存配置信息时,根据实际需求可自行更改缓存过期时间、缓存数量等相关参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值