【问题标题】:Unable to use caching at model level无法在模型级别使用缓存
【发布时间】:2015-12-29 09:26:34
【问题描述】:

Play Framework 2.4.x 描述了如何在控制器级别使用缓存,但是在模型级别呢?

一种解决方案是在控制器级别注入它,然后在每次调用模型时将其传递给模型,但这似乎很尴尬,更好的实现是模型处理自己的缓存机制而无需修改控制器,无需控制器甚至知道。

有没有更好的解决方案?

【问题讨论】:

    标签: scala caching playframework model playframework-2.4


    【解决方案1】:

    试试 JedisPool。 redis的实现。

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

    在 build.sbt 中。

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

    【讨论】:

    • 缓存工具或系统不是这里的问题。
    【解决方案2】:

    您可以在项目的任何类中使用缓存,我在我的 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

    【讨论】:

      猜你喜欢
      • 2015-05-25
      • 2011-02-24
      • 1970-01-01
      • 1970-01-01
      • 2015-09-16
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多