正确注释ehcache和spring

时间:2017-03-22 18:57:29

标签: spring caching ehcache

我有一个像这样的Model对象 -

class ProductDTO {
    int id;
    String code;
    String description;

   //getters and setters go here
}

我正在尝试在带有ehcache的Spring 4中使用这样的代码 -

class ProductServiceImpl implements ProductService {

     List<ProductDTO> getAllProducts() {
         //Query to data layer getting all products
     }

     String getProductDescriptionById(int id) {
          //Query to data layer getting product by id
     }

     @Cacheable("prodCache")
     String getProductDescriptionByCode(String code) {
          //Query to data layer getting product by code
     }
}

缓存在getProductDescriptionByCode()方法上运行正常,该方法具有可缓存的注释。每次调用getProductDescriptionById()或getProductDescriptionByCode()时,如果有缓存未命中,我想获取所有产品(可能使用getAllProducts()但不一定)并缓存它们以便下次,我可以检索任何产品。我应该对注释或代码进行哪些添加或更改?

1 个答案:

答案 0 :(得分:2)

因此,当您使用getAllProducts()检索所有产品时,需要对每个产品进行迭代并使用@CachePut将它们放入缓存中。 您需要选择一次cacheput函数以按代码进行描述,其他按ID进行描述。

List<ProductDTO> getAllProducts() {
         List<ProductDTO> productList //get the list from database
         for(ProductDTO product : productList) {
             putProductDescriptionInCache(product.getDescription(), product.getCode());
          }
}

  @CachePut(value = "prodCache", key = "#Code")
   String putProductDescriptionInCache(String description, String Code){
    return description;
}