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

Hướng dẫn làm trợ cấp thất nghiệp

Mình từng có "cơ hội" làm hồ sơ trợ cấp thất nghiệp đợt dịch Covid-19, mình sẽ hướng dẫn cho các bạn toàn bộ hồ sơ cần thiết và vài điểm phải lưu ý để mọi người không phải đi lại nhiều lần. Đầu tiên, hồ sơ sẽ bao gồm các giấy tờ sau: 1. Đơn đề nghị hưởng trợ cấp thất nghiệp theo mẫu do Bộ trưởng Bộ Lao động - Thương binh và Xã hội quy định. - Mẫu 16 bạn có thể download tại  đây  hoặc khi lên trên trung tâm sẽ có mẫu in sẵn.  2. Bản chính ( nếu có hai bản thì sẽ nộp một bản ) hoặc bản sao có chứng thực của một trong các loại giấy tờ bên dưới để  xác nhận về việc chấm dứt hợp đồng lao động:  + Quyết định thôi việc; + Quyết định sa thải; + Quyết định kỷ luật buộc thôi việc; + Thông báo hoặc thỏa thuận chấm dứt hợp đồng lao động hoặc hợp đồng làm việc. Lưu ý:  + Nếu chỉ có một bản thì bắt buộc phải sao y, công chứng đóng  dấu giáp lại  và mang bản chính theo, sau khi kiểm tra họ sẽ trả lại bản chính. Bạn có muốn nộp luôn bản chính cũng không được nha....

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ạ...