2017-02-16 98 views
0

我正在使用Play Framework 2.5與Java。我必須從一個非常慢的數據庫中檢索一些數據,並在我的應用程序的幾個部分中需要這些數據,特別是在我的Java控制器和Scala模板中。在當前請求中存儲對象

將我的數據對象作爲參數傳遞給每個方法會非常「雜亂」。

我想要的是從數據庫中檢索數據,將它「綁定」到當前請求並將其用在我的控制器和模板中。它應該存活一個HTTP請求。並行HTTP請求應該從數據庫重新加載數據。但我不想在同一個請求中兩次加載相同的數據。

什麼是用Play存儲我的數據的正確位置?

目前我在我的控制器和模板中使用了一個像「Helper.getHeavyObject()」這樣的助手方法。該幫助程序從Redis緩存中檢索數據,但我想擺脫它。這是太多的開銷。目前,我正在從Redis爲單個請求加載相同對象達6次。一定會有更好的辦法。

謝謝!

回答

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

+1

> Http有一個public Map args;你可以在模板和控制器上訪問它 完美的,我會嘗試。這是我正在尋找的。 >嘗試使用播放緩存 目前我正在使用Redis緩存,並且我正在查詢它最多6次,因爲這個對象很荒謬。 謝謝! – schube

+0

如果您使用動作組合,則可以在地圖上添加該值,但請記住,在每次新請求時,都會執行查詢並將其添加到地圖中,這是由於該遊戲的無狀態設計。 – pedroct92

相關問題