0

JdbcCursorItemReader (データベースの Request テーブルからデータを読み取る) である別のリーダーのデータを読み取り、特定のサイズのリストを作成し、アイテムのリストを返すカスタム Item リーダーがあります。

リクエスト テーブルには、ID、タイプ、およびステータスがあります。

リーダーによって読み取られた ID のステータスを PROCESSING のようなものに更新して、要求 ID がバッチで処理されていることをアプリケーションが表示できるようにしたいと考えています。また、ビジネス例外がある場合にアイテムを処理しているときに、特定のステータスの ID のテーブルを更新したいと考えています。

アイテムが読み取られて処理されている場合、それらのリクエストのステータスが REQUESTED ではなく PROCESSING と表示されるように、ステータス更新部分を別のトランザクションにする必要がありました。

リクエストのステータスを更新するメソッドで @Transactional(propagation=Propagation.REQUIRES_NE W) を使用しています。

Spring バッチ テーブルとアプリケーション固有のテーブルに、別々のデータ ソースとトランザクション マネージャーを使用しています。

JDBC テンプレートを使用してステータスを更新しています。

アプリケーション データ ソースに javax.sql.DataSource を使用し、アプリケーション トランザクション マネージャに JpaTransactionManager と HibernateJpaVendorAdapter を使用しています。

データベースはオラクルです。

デバッグ ログをオンにすると、メイン トランザクションが中断され、更新ステータスがリーダーから呼び出されたときに新しいトランザクションが使用され、コミットされ、中断されたトランザクションが再開されることがわかります。しかし、データベースに変更が見られません。トランザクション ログにはコミット済みと表示されますが、データベースに変更が見られません。バッチが完了すると、データベース内の要求テーブルに変更が表示されます。何か不足していますか?

ログは次のとおりです。 15:40:26 [main] DEBUG o.s.t.a.AnnotationTransactionAttributeSource - Adding transactional method 'updateStatus' with attribute: PROPAGATION_REQUIRES_NEW,ISOLATION_DEFAULT; '' 15:40:48 [main] DEBUG o.s.o.j.JpaTransactionManager - Creating new transaction with name [null]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT 15:40:48 [main] DEBUG o.s.o.j.JpaTransactionManager - Opened new EntityManager [org.hibernate.ejb.EntityManagerImpl@36dd518b] for JPA transaction 15:40:48 [main] DEBUG o.h.e.t.s.AbstractTransactionImpl - begin 15:40:48 [main] DEBUG o.h.e.j.i.LogicalConnectionImpl - Obtaining JDBC connection 15:40:48 [main] DEBUG o.h.e.j.i.LogicalConnectionImpl - Obtained JDBC connection 15:40:48 [main] DEBUG o.h.e.t.i.j.JdbcTransaction - initial autocommit status: true 15:40:48 [main] DEBUG o.h.e.t.i.j.JdbcTransaction - disabling autocommit 15:40:48 [main] DEBUG o.s.o.j.JpaTransactionManager - Exposing JPA transaction as JDBC transaction [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@3a7b058e] 15:40:48 [main] INFO c.c.c.f.c.a.b.RequestReader - Reading... 15:40:48 [main] INFO c.c.c.f.c.a.b.SecuritiesReader - End of Input Data from request id ItemReader 15:40:48 [main] DEBUG o.s.o.j.JpaTransactionManager - Creating new transaction with name [*.updateStatus]: PROPAGATION_REQUIRES_NEW,ISOLATION_DEFAULT; '' 15:40:48 [main] DEBUG o.s.o.j.JpaTransactionManager - Opened new EntityManager [org.hibernate.ejb.EntityManagerImpl@628b6e47] for JPA transaction 15:40:48 [main] DEBUG o.h.e.t.s.AbstractTransactionImpl - begin 15:40:48 [main] DEBUG o.h.e.j.i.LogicalConnectionImpl - Obtaining JDBC connection 15:40:48 [main] DEBUG o.h.e.j.i.LogicalConnectionImpl - Obtained JDBC connection 15:40:48 [main] DEBUG o.h.e.t.i.j.JdbcTransaction - initial autocommit status: true 15:40:48 [main] DEBUG o.h.e.t.i.j.JdbcTransaction - disabling autocommit 15:40:48 [main] DEBUG o.s.o.j.JpaTransactionManager - Exposing JPA transaction as JDBC transaction [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@88f431d] 15:40:48 [main] INFO c.c.c.f.c.a.b.s.i.InstrumentIdentifierServiceImpl - Updating the status of Request Id's 15:40:48 [main] DEBUG org.hibernate.SQL - UPDATE REQUEST SET STATUS = ? , MESSAGE = ? WHERE ID = ? 15:40:48 [main] DEBUG o.s.o.j.JpaTransactionManager - Initiating transaction commit 15:40:48 [main] DEBUG o.s.o.j.JpaTransactionManager - Committing JPA transaction on EntityManager [org.hibernate.ejb.EntityManagerImpl@628b6e47] 15:40:48 [main] DEBUG o.h.e.t.s.AbstractTransactionImpl - committing 15:40:48 [main] DEBUG o.h.e.t.i.j.JdbcTransaction - committed JDBC Connection 15:40:48 [main] DEBUG o.h.e.t.i.j.JdbcTransaction - re-enabling autocommit 15:40:48 [main] DEBUG o.s.o.j.JpaTransactionManager - Closing JPA EntityManager [org.hibernate.ejb.EntityManagerImpl@628b6e47] after transaction 15:40:48 [main] DEBUG o.s.o.j.EntityManagerFactoryUtils - Closing JPA EntityManager 15:40:48 [main] DEBUG o.h.e.j.i.LogicalConnectionImpl - Releasing JDBC connection 15:40:48 [main] DEBUG o.h.e.j.i.LogicalConnectionImpl - Released JDBC connection 15:40:48 [main] DEBUG o.s.o.j.JpaTransactionManager - Resuming suspended transaction after completion of inner transaction

ありがとうございました!

4

1 に答える 1