作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个经常访问但庞大的值 - valueA,它是通过方法 - rest controller - ControllerA 的 methodA 获得的。所以我使用 @Cacheable 注释缓存了这个值,如下所示。
@CacheConfig(cacheNames={"abc_cache"})
public class ControllerA
{
@Cacheable
@RequestMapping(value = "/value/" , method=RequestMethod.GET)
public ResponseEntity<Value> fetchValue()
{
// some logic
return new ResponseEntity<Value>(value, HttpStatus.OK);
}
}
我想在另一个方法中访问这个值 - 另一个 Controller 的 methodB - controllerB。我怎样才能访问这个值?
最佳答案
您可以使用其他一些类/bean 来提供该值。然后您可以将该 bean 注入(inject)到您想要的所有 Controller 中。
像这样:
@Component
public class MyValueService {
@Cacheable
public Value getValue() {
return ...;
}
}
然后在 Controller 中
public class ControllerA
{
@Autowired
private MyValueService valServ;
@RequestMapping(value = "/value/" , method=RequestMethod.GET)
public ResponseEntity<Value> fetchValue()
{
return new ResponseEntity<Value>(valServ.getValue(), HttpStatus.OK);
}
}
您知道 Controller -> 服务 -> 存储库模式吗?
基本上:
Controller 是网络层。他们处理 http 请求。他们使用服务。
服务负责应用程序的业务逻辑。他们使用存储库。
存储库负责数据访问 - 数据库访问、从文件系统读取/写入等。
您应该以这种方式构建您的应用程序。
一般来说,我会在 Repository 层上使用缓存。通常瓶颈是 I/O 操作(读/写文件系统、数据库调用、通过网络调用外部服务),如果可能的话,这些是您想要缓存的东西。
关于spring - 如何在其他 Controller 中访问使用 spring @cacheable 缓存的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45485058/
我是一名优秀的程序员,十分优秀!