2

@AsyncSpringBoot アプリケーションに (メールを並行して送信するための) メソッドを導入したいと考えていました。しかし、@EnableAsyncアプリケーションのメイン@Configurationクラス (注釈付き) に注釈を付けると、 (テスト用に schema.sql と data.sql を@SpringBootApplication実行する) が実行される前に、Flyway DB の移行が実行されます。DataSourceInitializer

'should-be-migrated' データベース テーブルを含む最初の操作が失敗します。

を削除すると、@EnableAsyncすべてが正常に戻ります。これが発生する理由と、これを修正する方法 (または問題を回避する方法) を教えてください。

更新いくつかの調査結果: @EnableAsync(mode = AdviceMode.ASPECTJ)DB セットアップの元の順序を保持しますが、@Asyncメソッドは呼び出し元スレッドと同じスレッドで実行されます。また、Bean 'objectPostProcessor' が@EnableAsync存在しない場合、または@EnableAsync(mode = AdviceMode.ASPECTJ)使用されている場合に、早期に (3 番目の Bean) が作成されることも確認しました。only@EnableAsyncを使用すると、この Bean はかなり後で作成されます。

更新 2@EnableWebSocketMessageBroker問題を再現する最小限のプロジェクトをまだ作成できませんでしたが、次のコードをコメントアウトすると、影響を受けるアプリケーションで適切な DB セットアップ順序が復元されることがわかりました。

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer
{ 
  ...
}

Bean 'webSocketConfig' は、(INFO レベルのコンソール出力に従って) 作成された最初の Bean です (@EnableWebSocketMessageBroker存在する場合)。

4

1 に答える 1