0

例外によってトランザクションがロールバックされた場合にメッセージが再配信されるように、トランザクション ポーラー (Spring 3.1.2 および Spring-Integration 2.2.3) があります。

    <int:outbound-channel-adapter id="obca" ref="notificationHandler" 
        method="handle" channel="notificationChannel" >
        <int:poller max-messages-per-poll="100" fixed-delay="6000"
            time-unit="MILLISECONDS">
            <int:transactional isolation="DEFAULT" />
        </int:poller>   
    </int:outbound-channel-adapter>

これは、H2 データベースを使用した単体テスト時に正常に機能し、メソッドが例外をスローする限り、メッセージは再配信されます

   @Transactional
   public void handle(Message<MyPayload> message)

しかし、本番環境で使用するSQLサーバー(重要な場合はREAD COMMITTED SNAPSHOTを分離レベルとして使用するms-sqlserver)を使用すると、例外の再配信が機能しません。これがなぜであるかのヒントはありますか?

編集:

TRACE ログでテストしましたが、疑わしいログ メッセージを見つけることができませんでした。最終的に動作するようになりました。通常の org.springframework.orm.jpa.JpaTransactionManager の代わりに、別個の dataSource (通常のデータベースと同じ構成) と transactionManager org.springframework.jdbc.datasource.DataSourceTransactionManager を宣言しました。

4

0 に答える 0