2012-05-21 24 views
7

Trong khi thực hiện loadtesting trên ứng dụng của chúng tôi, tôi nhận thấy rằng nếu bạn sử dụng @Transactional và @Cacheable chú thích rằng hibernate luôn tạo một giao dịch cơ sở dữ liệu. Có cách nào dễ dàng để ngăn chặn điều này không? Một cách eleberate hơn để giải quyết việc này trong mùa xuân là phải có sau lớp/giao diệnKết hợp hibernate @Transactional & ehcache @Cacheable luôn tạo ra giao dịch DB

  • Servicelayer giao diện
  • Cacheable lớp chú thích mà chỉ là một proxy/mong muốn
  • giao dịch lớp chú thích implentation

Điều gì xảy ra sau đây

Gọi 1:

  1. Giao dịch được tạo ra
  2. phương pháp lớp được gọi
  3. kết quả cache & trở

Gọi 2:

  1. Giao dịch được tạo ra
  2. kết quả Cached được trở

Kết quả ưa thích nên:

Gọi 1:

  1. Giao dịch được tạo ra
  2. phương pháp lớp được gọi
  3. kết quả cache & trở

Gọi 2:

  1. kết quả Cached được trở
+0

không phải là Hibernate đang tạo kết nối, đó là Mùa xuân thực hiện trước khi gọi phương thức mà bạn đã đánh dấu @Transactional –

Trả lời

9

Bạn cần phải thay đổi thứ tự tương đối của @Transactional@Cacheable khía cạnh.

Nó có thể được định cấu hình bằng cách sử dụng thuộc tính order của <tx:annotation-driven><cache:annotation-driven>. Xem 8.2.4.7 Advice ordering để biết ý nghĩa của giá trị đơn đặt hàng.

Các vấn đề liên quan