我想使用缓存来处理大量的外部API调用。
逻辑是这样的:
1.使用参数banana
调用我的自定义终结点
1.正在检查缓存
1.如果没有缓存,请检查数据库
1.如果不在数据库中,则调用外部API
1.保存到数据库,保存到缓存
1.返回
我做了一些草案实现,但当我调用外部API时,我不仅需要提供banana,还需要提供100g banana
,这意味着,如果我把注解@CachePut作为键指向参数,那么在缓存中我会保存字符串100g banana
而不是banana。通过提供key作为response对象的字段值是否可以节省缓存?(只是香蕉)假设外部json有效负载使用字段进入ProductDTO
- 姓名
- 体重
@Cacheable(value = "products", key = "#productName", unless = "#result == null")
@GetMapping("/prod/{productName}")
public Product getProductCache(@PathVariable String productName) {
log.info("Getting product with name {}.", productName);
Product product = productRepository.getByName(productName);
log.info("Product in database is:{}", product);
if (product == null) {
product = productService.getProductFromExternalApi(productName);
}
return product;
}
@CachePut(value = "products", key = "#I want product.getName without passing Product as a parameter")
public Product getProductFromExternalApi(String productName){
SOME CODE TO BUILD A REQUEST
productRepository.save(product);
return product;
}
顺便说一句,我没有得到www.example.com,它指向Controller类而不是Product。我可以做一个正则表达式或子字符串,100g香蕉到香蕉,但是的,我想知道是否可以直接从注解root.target which points to the Controller class rather than Product. I can ofc make a regex or substring that 100g banana to banana but yea, I wonder if it's possible just directly from the annotation
1条答案
按热度按时间2q5ifsrm1#
你试过用这个吗?
或者