1
私の簡単なドメインクラス:地図を破壊する
class TestDestroy {
String x
}
とサービス:
class TestDestroyService implements DisposableBean {
@Override
void destroy() throws Exception {
TestDestroy d = new TestDestroy(x: "x")
println("Test destroy: ${d.x}")
}
}
私が呼び出した場合、コントローラのすべてのものからdestroy()
方法で結構です、私は出力を得ます:
Test destroy: x
destroy
がapp shで呼び出されると問題が発生します
2016-08-22 11:20:14.186:INFO:t.1:Destroying Spring FrameworkServlet 'grails'
Test destroy: null
2016-08-22 11:20:14.487:INFO:t.1:Closing Spring root WebApplicationContext
2016-08-22 11:20:14.496:INFO:oejsh.ContextHandler:stopped o.e.j.w.WebAppContext{ ...
これはドメインクラスでのみ発生します。これは、他のGroovyクラスでは、コンストラクタが正しく動作するためです。私がsetterでプロパティを設定すると、それは機能します。
マップコンストラクタでドメインクラスを使用し、destroy()
セットアップから呼び出されたコードのためのその一般的に危険な:あなたは、ブートストラップ法はINITのGrailsを使用して破壊しないのはなぜ
groovy 2.4.4
hibernate4 4.3.6.1
jetty 8.1.9
destroyメソッドが実行されるため、ブートストラップから呼び出す必要はありません。 DisposableBeanの 'destroy()'コールバックメソッドは、読みやすく、春の正常なシャットダウンを実装する標準的な方法です。問題は、groovyのMapコンストラクタが破棄後に機能しないことです。 –