【发布时间】:2015-12-29 09:26:34
【问题描述】:
Play Framework 2.4.x 描述了如何在控制器级别使用缓存,但是在模型级别呢?
一种解决方案是在控制器级别注入它,然后在每次调用模型时将其传递给模型,但这似乎很尴尬,更好的实现是模型处理自己的缓存机制而无需修改控制器,无需控制器甚至知道。
有没有更好的解决方案?
【问题讨论】:
标签: scala caching playframework model playframework-2.4
Play Framework 2.4.x 描述了如何在控制器级别使用缓存,但是在模型级别呢?
一种解决方案是在控制器级别注入它,然后在每次调用模型时将其传递给模型,但这似乎很尴尬,更好的实现是模型处理自己的缓存机制而无需修改控制器,无需控制器甚至知道。
有没有更好的解决方案?
【问题讨论】:
标签: scala caching playframework model playframework-2.4
试试 JedisPool。 redis的实现。
在使用 redis 缓存之前,您需要禁用默认缓存模块。 play.modules.disabled = ["play.api.cache.EhCacheModule"]
在 build.sbt 中。
"com.typesafe.play.modules" %% "play-modules-redis" % "2.4.0",
【讨论】:
您可以在项目的任何类中使用缓存,我在我的 java 项目中使用了以下代码:
public class ProductServiceImpl implements ProductService {
private final WSClient ws;
private UserService userService;
private CacheApi cache;
@Inject
public ProductServiceImpl(WSClient ws) {
this.ws = ws;
}
@Inject
public void setCache(CacheApi cache) {
this.cache = cache;
}
@Inject
public void setUserService(UserService userService) {
this.userService = userService;
}
}
但在 Scala 中,我假设您可以执行以下操作:
import javax.inject._
import play.api.cache._
class Model @Inject() (cache: CacheApi) {
// ...
}
注意:
@Inject 注解可用于字段或构造函数
更多关于如何在 play scala 上使用 @Inject 注解的信息:https://www.playframework.com/documentation/2.4.x/ScalaDependencyInjection#Declaring-dependencies
【讨论】: