Cấu hình Spring sử dụng EhCache Annotations

Thursday, April 27, 2017
Edit this post

ehcache

EhCache là một bộ cache thuần Java có thể được tích hợp một cách dễ dàng với hầu hết các framework Java thông dụng như Spring và Hibernate. Nó thường được xem như là lựa chọn thuận tiện nhất cho các ứng dụng Java bởi vì nó có thể được tích hợp dễ dàng vào các project.

+++++

EhCache is a widely-used, pure Java cache that can be easily integrated with most popular Java frameworks, such as Spring and Hibernate. It is often considered to be the most convenient choice for Java applications since it can be integrated into projects easily.

EhCache là một bộ cache thuần Java có thể được tích hợp một cách dễ dàng với hầu hết các framework Java thông dụng như Spring và Hibernate. Nó thường được xem như là lựa chọn thuận tiện nhất cho các ứng dụng Java bởi vì nó có thể được tích hợp dễ dàng vào các project.

Về cơ bản, apply cache đúng cách sẽ giúp bạn giảm tải rất nhiều cho server. Giả sử các bạn có 1 giá trị được lưu trong database cần sử dụng nhiều lần giữa nhiều màn hình khác nhau trong cùng 1 session. Thay vì mỗi lần sử dụng giá trị ta phải gọi xuống database sẽ gây lãng phí tài nguyên, các bạn có thể lưu giá trị đó trong cache và lấy ra mỗi khi cần đến nó.

Bài viết này được dịch từ bài viết gốc bằng tiếng Anh của tác giả Cong Liu. Các bạn có thể đọc bài viết gốc tại đây.

ehcache

Trong bài viết này, giả sử các bạn đã có một project web service Spring MVC chạy trên Tomcat 8 server, project sử dụng Maven để build, IDE có thể là Eclipse hoặc Spring Tool Suite. Các bước thực hiện như sau:

1. CẤU TRÚC TỔNG THỂ CỦA PROJECT:
Bước tạo project này các bạn tự làm nhé, không có gì khó khăn cả.

ehcache

2. TẠO MỘT RESTFUL WEB SERVICE ĐƠN GIẢN:
Tạo file SpringRestControllerWithEhCache.java trong package project.toptal.blog. Ở đây chúng ta sẽ có 2 service đơn giản làm nhiệm vụ đọc và ghi tin nhắn với id của tin nhắn được truyền vào từ tham số đường dẫn.

@RestController  
@RequestMapping( "/" )
public class SpringRestControllerWithEhCache {
   @Autowired
   MessageService messageService;
   
   @RequestMapping( value = "/message/{id}", method = RequestMethod.GET )
   public String getMessage( @PathVariable Integer id ) {
      String message = messageService.getMessage( id );
      System.out.println( "get message ["+message+"] at "+new Date() );
      return message;
   }
   
   @RequestMapping( value = "/message/set/{id}/{message}", method = RequestMethod.POST )
   public String setMessage( @PathVariable Integer id, @PathVariable String message ) { 
      System.out.println( "set message ["+message+"] at "+new Date() );
      messageService.setMessage( id, message );
      return message;  
   }
}

Tạo tiếp MessageService.java trong package com.toptal.blog.service. Lớp này có nhiệm vụ truy cập vào database chứa message, nhưng ở đây, để đơn giản chúng ta sẽ dùng HashMap thay cho DB để lưu trữ message.

@Service
public class MessageService {
   private ConcurrentHashMap<Integer, String> messages
   = new ConcurrentHashMap<Integer, String>();
   
   public String getMessage( Integer id ) {
      System.out.println( "Getting data from SOR......" );
      return messages.get( id );
   }

   public void setMessage( Integer id, String message ){
      messages.put( id, message );
   }
}

+ Để test thử service vừa dựng lên các bạn hãy deploy project trong Tomcat.
+ Để set message, với id=1, hãy tạo một HTTP POST request tại địa chỉ: http://localhost:8080/EhCacheExample/message/set/1/test_message với 'test_message' là nội dung của phần tin nhắn.
+ Nếu bước set message thành công, các bạn sẽ có thể lấy ra được nội dung tin nhắn bằng 1 HTTP GET request tại địa chỉ: http://localhost:8080/EhCacheExample/message/get/1 với '1' là id của tin nhắn.

3. APPLY EHCACHE VÀO PROJECT:
3.1 Cập nhật dependecies để sử dụng EhCache Annotations:
Nếu các bạn sử dụng Maven  thì việc apply EhCache là rất đơn giản, chỉ cần thêm đoạn dependency sau vào file pom.xml. Lưu ý trong project này chúng ta sử dụng EhCache phiên bản 1.2.0, các phiên bản mới hơn có thể sẽ có khác biệt trong cách implementation cụ thể.

<!-- ehcache -->
<dependency>
   <groupId>com.googlecode.ehcache-spring-annotations</groupId>
   <artifactId>ehcache-spring-annotations</artifactId>
   <version>1.2.0</version>
</dependency>

3.2 Cấu hình EhCache:
Tạo file ehcache.xml trong đường dẫn src/main/resources. File này là bắt buộc để EhCache có thể hoạt động một cách đúng đắn. Nó giúp định nghĩa tên của các cache và các thuộc tính của từng cache một.

<ehcache xmlms:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd">
   <diskStore path="cache" />
   <cache
      name="messageCache"
      maxElementsInMemory="10000"
      eternal="false"
      timeToIdleSeconds="0"
      timeToLiveSeconds="10"
      overflowToDisk="false"
      memoryStoreEvictionPolicy="LFU" />      
</ehcache>

3.3 Chạy thử:
Bây giờ mọi thứ đã gần như sẵn sàng, các bạn chỉ cần thêm annotation @Cacheable vào method getMesssage trong class MessageService nữa là xong.

@Cacheable( cacheName = "messageCache" )
public String getMessage( Integer id ) {
   System.out.println( "Getting data from SOR......" );
   return messages.get( id );
}

+ Để kiểm tra, các bạn tạo 1 HTTP POST request mới tại địa chỉ: http://localhost:8080/EhCacheExample/message/set/1/newMessage
+ Sau đó, lấy ra message với id=1 nhiều lần bằng cách gọi tới HTTP GET request tại địa chỉ: http://localhost:8080/EhCacheExample/message/1
+ Nếu đọc nội dung trong console, các bạn sẽ thấy Message service chỉ được gọi lên 1 lần đầu để lấy lên message, các lần sau sẽ message sẽ tự động được lấy từ trong cache ra. Bởi vì chúng ta đã cấu hình trong ehcache.xml tham số timeToLiveSeconds là 10 giây nên sau mỗi 10 giây cache sẽ được refresh và web service sẽ lại phải gọi xuống MessageService để lấy lên nội dung message.

set message [newMessage] at Sun Dec 06 23:55:39 MST 2015
get message [newMessage] at Sun Dec 06 23:55:42 MST 2015
Getting data from SOR......
get message [newMessage] at Sun Dec 06 23:55:47 MST 2015
get message [newMessage] at Sun Dec 06 23:55:49 MST 2015
get message [newMessage] at Sun Dec 06 23:55:54 MST 2015
Getting data from SOR......

4. CẤU TRÚC TỔNG THỂ CUỐI CÙNG CỦA PROJECT:

ehcache

Trên đây là những bước cơ bản để cấu hình EhCache cho 1 project Spring MVC ở mức cơ bản. Hy vọng các bạn đã hiểu được cơ chế và cách thức làm việc của EhCache và có thể áp dụng được nó vào các dự án của mình. Chúc các bạn thành công.

Theo Toptal

.
Xin vui lòng chờ đợi
Dữ liệu bài viết đang được tải về

💻Nhận dạy online 1 kèm 1 Automation Test từ cơ bản tới nâng cao (From Zero to Hero) 😁😁😁
Lộ trình gồm 3 phần:
1) Kỹ thuật lập trình và tư duy lập trình cơ bản
2) Nhập môn kiểm thử (Manual Test)
3) Kiểm thử tự động (Automation Test) + Chuẩn bị cho phỏng vấn
* Lộ trình chi tiết: Xem tại đây

🎓Đối tượng người học:
- Những bạn bị mất gốc căn bản môn lập trình.
- Những bạn muốn theo con đường kiểm thử (testing), đặc biệt là kiểm thử tự động (Automation Test).

🦘Người giảng dạy:
- Mình sẽ là người trực tiếp hướng dẫn.
- Nếu là các vấn đề ngoài chuyên môn hoặc sở trường, mình sẽ nhờ các anh chị em khác cũng làm trong ngành.

🤓Giới thiệu:
- Mình đã có hơn 10 năm kinh nghiệm làm IT ở cả trong và ngoài nước. Trong đó 3 năm đầu là làm lập trình viên Java, sau đó bén duyên với mảng Automation Test và theo nghề tới tận bây giờ. Mình được đào tạo chính quy về IT từ một trường Đại học danh tiếng ở TP.HCM (hệ kỹ sư 4 năm rưỡi), có chứng chỉ ISTQB, có thể giao tiếp tốt bằng tiếng Anh và có kinh nghiệm làm việc thực tế ở cả 2 mảng Outsource và Product. Title chính thức của mình là QA Automation Engineer, tuy nhiên, mình vẫn làm những dự án cá nhân chuyên về lập trình ứng dụng như Học Tiếng Anh StreamlineSách Nhạc. Mình là người có thái độ làm việc chuyên nghiệp, chăm chỉ và luôn nhiệt tình trong công việc.

💵Chi phí và hình thức thanh toán:
- Các bạn vui lòng liên hệ qua email songtoigianvn@gmail.com (email, chat, hoặc call) để book nội dung và khung giờ học (từ 8h tối trở đi).
- Mức phí: 150.000đ/buổi, mỗi buổi 60 phút.
- Lộ trình From Zero to Hero: 4.350.000đ (29 buổi).
- Bạn có thể học riêng và đóng tiền theo từng phần nếu muốn.
- Có thể học trước 1-2 buổi trước khi quyết định đi full lộ trình hoặc từng phần.
- Thanh toán qua Momo, chuyển khoản v.v...
BÌNH LUẬN
© Copyright by CUỘC SỐNG TỐI GIẢN
Loading...