2013-01-15 39 views
6

Tôi đã định cấu hình bộ đệm phương thức mùa xuân bằng ehcache và cấu hình hướng chú thích.Vô hiệu hóa bộ nhớ đệm phương thức mùa xuân thông qua thuộc tính bên ngoài

Tuy nhiên, tôi muốn có thể tắt tính năng này từ tệp cấu hình mà chúng tôi sử dụng trong ứng dụng.

Ý tưởng đầu tiên của tôi là gọi net.sf.ehcache.CacheManager.CacheManager() mà không có đối số nếu tính năng lưu bộ nhớ cache phương pháp bị vô hiệu hóa. Đây ném ngoại lệ:

java.lang.IllegalArgumentException: loadCaches must not return an empty Collection 
at org.springframework.util.Assert.notEmpty(Assert.java:268) 
at org.springframework.cache.support.AbstractCacheManager.afterPropertiesSet(AbstractCacheManager.java:49) 

tưởng thứ hai của tôi là để cấu hình net.sf.ehcache.CacheManager.CacheManager() với dữ liệu mặc định để bộ nhớ cache không được sử dụng (maxElementsInMemory 0 vv). Nhưng sau đó bộ nhớ cache vẫn được sử dụng, đó không phải là những gì tôi muốn.

Có một tài sản net.sf.ehcache.disabled nhưng tôi không muốn vô hiệu hóa bộ đệm ẩn ngủ đông cũng sử dụng ehcache.

Q Tôi làm cách nào để định cấu hình mọi thứ để có bộ nhớ đệm phương pháp mùa xuân nhưng tắt tính năng này khỏi tệp cấu hình bên ngoài? Tôi không muốn sửa đổi bối cảnh ứng dụng cũng như mã để kích hoạt/vô hiệu hóa bộ đệm phương thức. Chỉ có thể sửa đổi tệp cấu hình chúng tôi sử dụng trong ứng dụng.

+0

Làm thế nào để bạn kích hoạt chức năng Caching spring caching, bởi xml? Bạn có sử dụng Spring 3.1 không? – Ralph

+0

Tôi sử dụng mùa xuân 3.1 với bộ đệm ẩn chú thích được hướng dẫn như được giải thích trong http://static.springsource.org/spring/docs/3.1.0.M1/spring-framework-reference/html/cache.html – phury

Trả lời

8

gì tôi đang tìm kiếm là NoOpCacheManager:

Để làm cho nó làm việc tôi chuyển từ việc tạo ra đậu xml để một nhà máy

tôi đã làm một cái gì đó như sau:

@Bean 
public CacheManager cacheManager() { 
    final CacheManager cacheManager;   
    if (this.methodCacheManager != null) { 
     final EhCacheCacheManager ehCacheCacheManager = new EhCacheCacheManager(); 
     ehCacheCacheManager.setCacheManager(this.methodCacheManager); 
     cacheManager = ehCacheCacheManager; 
    } else { 
     cacheManager = new NoOpCacheManager(); 
    } 

    return cacheManager; 
} 
3

Bạn có thể sử dụng một spring profile, để cho phép (hoặc không) sự hỗ trợ mùa xuân bộ nhớ đệm

<beans profile="withCache"> 
    <cache:annotation-driven /> 
</beans> 
+0

Tôi đã thử giải pháp đó nhưng tôi không quản lý để kiểm tra các cờ bộ nhớ cache của mình một cách có lập trình và sau đó bật các cấu hình bộ nhớ cache mà không làm mới bối cảnh. – phury

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