結論
DIでインジェクトしたクラスのpublicメソッドじゃないとだめ。
それまでの流れとか
SpringBootのCommandLineRunnerを使ってバッチ処理を作っていました。
もともと入力のCSVから別形式のCSVへの変換だったのですが、仕様変更で急遽DB操作を行うことになり大慌てで対応することに。
今後改修もないようなちょっとしたバッチ処理なのでJDBCTemplate
で実装することにしました。
1ステップ処理でワークテーブルをdelete-insertで洗い替えするだけなので、トランザクション不要でExitコードがエラーなら後続バッチを動かさなきゃいいかな、と考えていたのですが運用上ロールバック欲しいらしいので後付けで対応。
publicメソッドにしか@Transactionalをつけてもだめ。
publicメソッドにしか@Transactionalつけられなかったはず、と考えながら実装しても機能せず:0
このあたりを読んでみるとAOPProxy使っているから、なのかな。