2016-07-13 8 views
2

私はいくつかの設定に基づいてテーブルを初期化する必要があるスプリングブートアプリケーションを持っています。私は@Transactionalを使って管理された取引を使用しています。私の問題は、いつアプリケーションがDBトランザクションを作成する準備ができているのかわかりません。 私は設定を読み取り、表を更新Beanを作成したが、それはその時点で例外を取得します。私はsprintbootを待っていれば起動して、HTTPリクエストを通して同じ取引をするためにすることを試みましたスプリングブートの起動時にテーブルを初期化する

Could not obtain transaction-synchronized Session for current thread

、問題はありません。だからタイミングの問題があるようです。私も@PostConstructにコードを移動しようとしましたが、問題は解決しません。

DBトランザクションの準備ができていることを確認するにはどうすればよいですか?どんな助けでも大歓迎です。

答えて

1

初期化を実行する最も簡単かつクリーンな方法は、あなたのBeanがContextRefreshedEventためApplicationListenerを実装作り、その後onApplicationEvent方法で初期化を扱うことでなければなりません。この方法では、Springのアプリケーションコンテキスト全体が初期化されたときに初期化が実行されます。

+1

ヒントをお寄せいただきありがとうございます。私は実際にSpring 4.2以降で利用可能な注釈@EventListenerを使用しました。 – Aarkan

+0

さらに良い! :) –

2

Springが公開中のいくつかのイベントで聞くことができます。 あなたがproperblyも、この上でリッスンする必要がhere

を参照してください:ContextRefreshedEvent

関連する問題