Commitまでログ出てるんだけどレコードがない
SpringBootからMySQLへデータをInsertしたい。
ログを見るとInsert文もCommitも発行された形跡がある(SpringBoot・MySQLどっちのログにも)
エラーはどこにも出ていない。
でも、Selectしてみるとそんなレコードないんです。
結論:前提として、バッチ処理中のInsertでした。タスクが全部終わる時にコミットされます。
うまくいかないこのInsertはバッチ処理中のお話でした。
Insert文やCommitの命令は都度出ていたのですが、バッチの全てのタスクがエラーなしで終了するその時にCommitされるみたいです。
対処法
@ Transactionalをつけているクラス(Service)に追記します
@Transactional(value = Transactional.TxType.REQUIRES_NEW, rollbackOn = Throwable.class)
Spring Boot v2.6.0です。
ググったところ、前のバージョンだと指定する値の形式がちょっと異なるようですが、v2.6.0だとこれでうまく動きました!
アノテーションへのこの追記で、バッチ処理中その都度、しっかりDB InsertがCommitされるようになりました