我正在使用Play Framework 2.5和Java。我必须从一个非常慢的数据库中检索一些数据,并在我的应用程序的几个部分中需要这些数据,特别是在我的Java控制器和Scala模板中。
将我的数据对象作为参数传递给每个方法会非常“麻烦”。
我想要的是从数据库中检索数据,将其“绑定”到当前请求并在我的控制器和模板中使用它。 它应该只存在一个HTTP请求。并行HTTP请求应该从数据库重新加载数据。但我不想在同一个请求中加载两次相同的数据。
使用Play存储数据的正确位置是什么?
目前我在控制器和模板中使用了一个辅助方法,如“Helper.getHeavyObject()”。这个助手从Redis缓存中检索数据,但我想摆脱它。这是太多的开销。目前,我正在从Redis为同一个请求加载同一个对象多达6次。必须有更好的方法。
谢谢!
答案 0 :(得分:0)
Http有一个public Map<String, Object> args;
,您可以在模板和控制器上访问它ctx().args.put("your_key", object)
。它仅在一次请求期间可用。
请记住,播放是无状态的,也许会尝试使用播放缓存 https://www.playframework.com/documentation/2.5.x/JavaCache
或者您可以在每个请求上创建一个动作合成,读取缓存并将值放在地图上或只是从缓存服务器请求。 https://www.playframework.com/documentation/2.5.x/JavaActionsComposition