无法在模型级别使用缓存

时间:2015-12-29 09:26:35

标签: scala caching playframework model playframework-2.4

ActiveXObject描述了如何在控制器级别使用缓存,但是在模型级别呢?

解决方案是在控制器级别注入它,然后在每次调用模型时传递它,但这看起来很尴尬,更好的实现是模型处理自己的缓存机制而不必修改控制器,没有控制器甚至知道它。

有更好的解决方案吗?

2 个答案:

答案 0 :(得分:0)

试试JedisPool。 redis的实现。

您需要在使用redis缓存之前禁用默认缓存模块。 play.modules.disabled = [" play.api.cache.EhCacheModule"]

在build.sbt。

" com.typesafe.play.modules" %%" play-modules-redis" %" 2.4.0",

答案 1 :(得分: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