Grails 2.5.6で作業しています。Grailsスレッドから要求/セッションにアクセスする際にスレッドバインドされたリクエストが見つかりません
私は、これまでにシリーズで実行されていたタスクのリストを持っており、セッション上にある「lang」属性を参照する必要がありました。
コントローラからは、実行を高速化するために、タスクごとに1つ、スレッドを作成するクラスを呼び出します。私はスレッドを追加した後、このエラーコードがセッションにアクセスしようとしたときに表示されるように開始しました:
No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the o
riginally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outs
ide of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
私がリクエストにアクセスできるようにするために作成するスレッドで設定する必要があります何かがあると信じて/セッションが見つかりましたが、ドキュメントは見つかりませんでした。
セッションにアクセスする方法は、次のとおりです。これは、スレッドを追加する前に、[OK]を働いた
RequestContextHolder.currentRequestAttributes().session.lang
。
新しいスレッドでこのコード行を処理するために必要なことは何ですか?
私は古典的なThread.start/treads * .join()とgrails.async.Promises(http://docs.grails.org/2.5.6/guide/async.html)を使用して、スレッドを作成する2つの方法を試しました。両方私は同じエラーメッセージが表示されます。
https://stackoverflow.com/questions/43250539/grails-no-thread-bound-request-found以下のように、おそらくparamsやproperties.collect {it}を複製する必要がありますので、新しいリストとして取得し、新しいフラットマップに要素を格納してから、このプロセスを経て送信してください。レイジーな方法は時々噛むことができます - もしsession.langだけがそれをつかんでmap.something = params.langやsession.langにするのはなぜですか? – Vahid