我在Play 2.4中遇到了EhCache的问题,当我将对象添加到缓存(磁盘持久性)并尝试读取一切都很好。但是当我通过更改配置或代码中的某些内容来导致重新加载时。无法读取价值。
github项目的链接https://github.com/aswarcewicz/cache-test
控制器代码:
class CacheController @Inject()(cacheApi: CacheApi) extends Controller {
implicit val vFormat = Json.format[ValueObject]
implicit val rFormat = Json.format[Response]
val key = "key"
val valueToTest = ValueObject("test1", "test2")
def value(): Action[AnyContent] = Action.async {
Future {
val withCast = cacheApi.get[ValueObject](key)
val withoutCast = cacheApi.get(key).toString
Ok(Json.toJson(Response(withCast, withoutCast)))
}
}
def setValue(): Action[AnyContent] = Action.async {
Future {
cacheApi.set(key, valueToTest)
Ok("value set")
}
}
}
// value object to store in cache
case class ValueObject(field1: String, field2: String)
// object for response
case class Response(withCast: Option[ValueObject], withoutCast: String)
重现步骤: 1.通过打开http://localhost:9000/set添加要缓存的内容 2.通过打开http://localhost:9000/get来获取缓存中的上一个对象结果是=> { “withCast”:{ “字段1”: “测试1”, “FIELD2”: “TEST2”}, “withoutCast”: “一些(的ValueObject(TEST1,TEST2))”} 3.更改代码或配置中的内容以导致重新加载播放 4.再次打开http://localhost:9000/get从磁盘读取缓存对象,结果是=> { “withoutCast”: “一些(的ValueObject(TEST1,TEST2))”}