19

我正在运行Java Play 框架版本 v2.6.1 并使用Ebean进行持久性。我的目的是让bean 缓存使用play2-memcached插件。

到目前为止我做了什么?

  • 安装memcached在本地主机上并启用详细日志记录。
  • 用in替换ehcache依赖项(我认为这应该完全删除 Ehcache)。cacheApilibraryDependenciesbuild.sbt
  • 添加"com.github.mumoshu" %% "play2-memcached-play26" % "0.9.0",libraryDependencies_build.sbt
  • 添加"Spy Repository" at "http://files.couchbase.com/maven2",resolvers_build.sbt
  • 在应用程序配置中添加了以下条目:

play.modules.disabled += "play.api.cache.ehcache.EhCacheModule" play.modules.enabled+="com.github.mumoshu.play2.memcached.MemcachedModule" play.cache.defaultCache=default play.cache.bindCaches=["db-cache", "user-cache", "session-cache"] memcached.host="127.0.0.1:11211"

  • 拿走了我的实体并使其实现Serializable,还添加了@com.avaje.ebean.annotation.Cache注释。
  • 启用 SQL 日志记录

什么有效?

  • Entity.find.byId(id)使用结果 SQL加载实体SELECT。使用不同的请求再次加载它会导致没有 SQL 语句。
  • 打开浏览器到 localhost:11211 在 syslog 中显示错误——这是为了确保 memcached 正在运行并且我可以看到出现的请求
  • 进行内存转储我可以看到com.github.mumoshu已加载缓存相关的类。

什么不起作用?

  • 我希望将缓存的对象发送到 memcached(在读取和/或更新时)。这没有发生 - 没有与此相关的 memcached 日志。如果我运行,也没有任何与端口 11211 的连接netstat -na | grep 11211

有什么我想念的吗?

4

1 回答 1

1

您还需要绑定javax.caching.CacheManager. 添加

libraryDependencies += jcache

到你的build.sbt.

如果您使用的是 Guice,则还必须为 Java 注释添加以下内容:

libraryDependencies += "org.jsr107.ri" % "cache-annotations-ri-guice" % "1.0.0"

更多信息可以在 Playframework 文档的“JCache 支持”部分找到

于 2017-09-20T20:18:30.603 回答