Skip to main content

Hướng dẫn Spring Caching kết hợp Ehcache


Bài viết này hướng dẫn cơ bản để làm data caching với Spring framework kết hợp với một framework phổ biến về caching là Ehchache. Thực ra thì Spring tự bản thân nó đã hổ trợ caching nhưng Ehcache framework cung cấp thêm một số tùy chỉnh như thời gian hết hạn (thời gian remove khỏi bộ nhớ cache).

  • Ehcache 2.9
  • Spring 4.2.7.RELEASE
  • Maven 3
  • JDK 1.8
  • Spring tool suite/Eclipse

  1. Thư viện hỗ trợ

Thu viện hỗ trợ cho caching của Spring là spring-context.jar; để Spring hỗ trợ cho Ehcache caching cần thêm thư viện spring-context-support.jar.

pom.xml

 <dependency>
      <groupId>net.sf.ehcache</groupId>
      <artifactId>ehcache</artifactId>
      <version>2.9.0</version>
   </dependency>
   <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>4.2.7.RELEASE</version>
   </dependency>
   <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.2.7.RELEASE</version>
   </dependency>


2. Cấu hình
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:cache="http://www.springframework.org/schema/cache" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">
   <cache:annotation-driven />
   //your beans
</beans>

Hoặc bạn có thể sử dụng annotation @EnableCaching trong class config.

AppConfig.java

@EnableCaching
@Configuration
@ComponentScan(basePackages = "com.itphuongha.example")
@PropertySource(value = {"classpath:application.properties"})
@EnableScheduling
public class AppConfig {
  private final Logger log = LoggerFactory.getLogger(AppConfig.class);
  private net.sf.ehcache.CacheManager cacheManager; 




  @Bean
  public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
   return new PropertySourcesPlaceholderConfigurer();
  }

  @Bean
  public CacheManager cacheManager(EhCacheManagerFactoryBean factory) {
   EhCacheCacheManager ehCacheCacheManager = new EhCacheCacheManager();
   cacheManager = factory.getObject();
   ehCacheCacheManager.setCacheManager(cacheManager);
   return ehCacheCacheManager;
  }

  @Bean
  public EhCacheManagerFactoryBean ehCacheCacheManager() {
   log.info("ehCacheCacheManager");
   EhCacheManagerFactoryBean cmfb = new EhCacheManagerFactoryBean();
   cmfb.setConfigLocation(new ClassPathResource("ehcache.xml"));
   cmfb.setShared(true);
   return cmfb;
  }

ehcache.xml

<?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" name="CM1" updateCheck="false" maxBytesLocalHeap="16M"> <!-- This is a default configuration, it is re-configured by the CacheConfiguration Spring Bean, using the properties from the resources/config/*.yml files. --> <diskStore path="java.io.tmpdir" /> <cache name="token" timeToLiveSeconds="5" /> </ehcache>
  • timeToLiveSeconds: thời gian tối đa (tính theo giây) mà một đối tượng tồn tại trong cache bất kể nó có được gọi tới hay không. Ví dụ: đối tượng được tạo lúc 07:00:00; và nó sẽ được remove khỏi cache lúc 07:00:05, bất kể có hay không.
  • timeToIdleSeconds: thời gian tối đa (tính theo giây) mà một đối tượng tồn tại trong cache kể từ thời điểm cuối cùng nó được gọi hay sử dụng. Ví dụ: đối tượng được tạo lúc 07:00:00; lần cuối cùng nó được gọi truy cập tới là 08:00:00 sau 5s nếu không có truy cập khác thì sẽ được remove khỏi cache lúc 08:00:05.
3. @Cacheable 
Method với annotation @Cacheable thì khi nó được gọi nếu trong bộ nhớ cache có tồi tại giá trị tương ứng thì giá trị này được trả về mà không cần execute method; ngược lại thì execute nội dung method sau đó trả về kết quả đồng thời lưu giá trị đó vào bộ nhớ cache.
public class CachingDemo implements ICachingDemo {
 @Autowired
 private Environment environment;
 private static final JSONParser parser = new JSONParser();
 @Override
 @Cacheable(value = "token", unless = "#result == null")
 public String getToken() {
  // get from other system, API
  return token;
 }



4. Interface cho class caching class 
Như ở bước 3 class đang implement một interface. Đây là điểm mấu chốt quan trọng của caching, nếu không có interface thì cache sẽ không work. Mình đã gặp phải lỗi này nên hi vọng mọi người sẽ không bị.
public interface ICachingDemo {
 
 String getToken();
 
}

Phuong Ha

Comments

Post a Comment

Popular posts from this blog

Du lịch tự túc Hàn Quốc - Wifi - 3G - 4G

Đây là một điều cũng khiến mình khá lăn tăn khi du lịch tự túc một mình. Phải đảm bảo sao cho rẻ nhất và ổn định. Ở thành phố Seoul có rất nhiều điểm phát wifi miễn phí nên bạn có thể vừa bám bản đồ tàu điện ngầm vừa tận dụng những điểm wifi miễn phí này để đi cũng được, nhưng vì đi một mình thích lang bạt ra các điểm xa Seoul internet là một điều tất yếu của my life. 1. Portable Wifi: Dịch vụ cho thuê này hiện đang nở rộ, rất nhiều nhà dịch vụ cung cấp với các mức giá khác nhau. Mình cũng từng sử dụng dịch vụ này khi du lịch Singapore và Malaysia. Điển hình là  https://laxgonow.com/vi/wifi  hay  https://www.kkday.com/en/product/7452?cid=2868 Ưu điểm: pin trâu, chất lượng ổn định. Nhược điểm: giá thành cao (đi đông thì kinh tế hơn), nếu làm mất phải bồi thường chi phí khá cao => nếu bạn không tin tưởng khách sạn bạn ở thì đi đâu cũng phải mang nguyên bộ cả dây sạc, adaper sạc. Portable wifi của KKday (nguồn KKday) 2. 3G/4G: Mình đi một mình, không bao thầu...

Kinh nghiệm xin visa Hàn Quốc

Mình xin chia sẻ kinh nghiệm xin visa du lịch Hàn Quốc cho người đi làm và một số tip cho việc nộp hồ sơ ở Hồ Chí Minh được nhanh chóng và đỡ tốn thời gian. HỒ SƠ XIN VISA: Hộ chiếu còn thời hạn ít nhất 6 tháng. Đơn xin visa: bạn có thể download trực tiếp trên website đại sứ quán bản tiếng anh  http://www.mofa.go.kr/ENG/image/common/title/res/visa_application_form(15.06.15.).pdf  hoặc điền bản tiếng Việt khi lên nộp hồ sơ. Dán ảnh phông nền trắng, tiêu chuẩn kích thước mình thấy nhiều người nộp không đúng kích thước qui định trên đơn nên bạn có ảnh nào phông nền trắng dán vào cũng được. Chứng minh công việc: giấy xác nhận nhân viên, hợp đồng lao động, đơn xin nghỉ phép. Chứng minh tài chính Lịch trình tham quan Hàn Quốc (viết bằng tiếng Anh / tiếng Hàn) không cần công chứng  Đặt chỗ vé máy bay, đặt chỗ khách sạn: vé máy bay chỉ cần đặt chỗ, trả sau trên vietnamairline nhớ chuyển sang tiếng anh để vé điện tử là bản tiếng anh. Đặt cho khách sạ...