1

Grails で小さな Web アプリケーションを作成する グローバル オブジェクトで問題が発生しました。私はスレッドを実行するクラスを持っています - ExecutorService with queueing。

問題は、このクラスのオブジェクトをどこで作成し、Controller で使用できるようにするかです。

init (BootStrap) を試しましたが、そのインスタンスを他の場所に取得する機会はありません。

一般に、私が必要とするのは、アプリケーション全体の単一インスタンス内のオブジェクトであり、モデルおよび/またはコントローラーからアクセスできます。

4

3 に答える 3

3

一般に、私が必要とするのは、アプリケーション全体の単一インスタンス内のオブジェクトであり、モデルおよび/またはコントローラーからアクセスできます。

これを実現する標準的な方法は、オブジェクトを Spring Bean として宣言することです。grails-app/conf/spring/resources.groovy

threadPool(java.util.concurrent.Executors) { bean ->
  bean.factoryMethod = "newCachedThreadPool"
}

次に、コントローラー/サービス/などで。この Bean は、Grails サービスの場合と同じように注入できます。つまり、

def threadPool

しかし、この場合、そのような Bean を定義し、バックグラウンド タスクで使用できる有効な GORM セッションがあることを確認する複雑な作業を処理するpluginを使用するexecutor方が簡単な場合があります。

于 2013-03-24T11:27:06.213 に答える
1

Executorserviceを Spring Bean 内にラップするか、次のようなものを使用してみませんか。

grailsApplication.controllerClasses.each {controller ->
controller.metaClass.executorService = { ->
      executorService
 }
}
于 2013-03-24T03:12:31.563 に答える
0

実際、私は答えを確認する前に何かに来ました。

特定のドメイン クラス (Example) とコントローラー (ExampleController) の作成

 ExampleService

そこに必要なものをすべて含めるだけです。動作を@Singleton (デフォルト) に設定します。次に、コントローラーで次のようにインスタンスを挿入します。

 def exampleService
于 2013-03-24T17:49:19.803 に答える