[英]Rythm: create new engine or set Language/Locale on existing engine instance per request
節奏可以用作單例或實例化為普通對象。 目前,我在Servlet Init()
方法的webapp中實例化了它一次。 (這與使用單例幾乎相同,因為我只創建了一次)
現在,我需要在網站上添加i18n支持,並且需要在渲染之前動態設置語言。
我可以這樣做:
engine.setLocale(userLocale);
engine.render(template,arguments);
我假設如果我使用一個singleton(或在servlet中創建的單個實例),那么我可能會在兩個語句之間獲得競爭條件。
首先,在最新版的engine.prepare(Locale)
,您應該調用engine.prepare(Locale)
,而不是engine.setLocale(Locale)
;
現在回答您的問題:
- 這是正確的還是沒有比賽條件?
它不會導致競爭狀態,因為它在代碼內部使用ThreadLocal
存儲渲染設置。
- 我應該為每個請求創建一個Rythm實例嗎?
絕對沒有
- 是否有另一種方法可以更改每個渲染的語言而不更改引擎狀態?
語言和語言環境不是引擎級別的狀態,它們是每個請求的狀態。 但是,可以在引擎級別配置默認語言和語言環境
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.