B>>как так выходит, ведь exception в отдельной от spring batch транзакции ?
M>Какой transaction manager используется? И что там еще в логах написано, какой cause у исключения? А то ведь есть, например, и похожая проблема в конфигурации. Ну и если не поможет, копайте в сторону entity manager и его взаимодействия с транзакциями. OptimisticLockingException и вся ситуация намекает, что транзакция откатывается как раз entity manager'ом. А вот почему — не знаю. Или конфигурация неправильная. Или может вы какие-то entity из внешней транзакции протаскиваете. Или еще что-то.
JpaTransactionManager, в логе
2022-12-09 00:55:41,527 INFO [P-3010-20221208220447-2302] org.springframework.batch.core.step.tasklet.TaskletStep - Commit failed while step execution data was already updated. Reverting to old version.
2022-12-09 00:55:41,527 ERROR [P-3010-20221208220447-2302] org.springframework.batch.core.step.tasklet.TaskletStep - Rolling back with transaction in unknown state
2022-12-09 00:55:41,528 ERROR [P-3010-20221208220447-2302] org.springframework.batch.core.step.AbstractStep - Encountered an error executing step PrepareStep in job MyJob1
org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:526)
я полагаю была бы совсем неверная конфигурация, вообще бы не работало, а тут не работает только лишь, если в моем степе выскакивает OptimisticLockingException. я не пойму как события в моей логике могут влиять на спринг батч транзакцию, если они оформлены как совершенно отдельные транзакции. у моей логики отдельная транзакция.
ну и второй вопрос — верно ли я понимаю, что при OptimisticLockingException я обязан повторять попытку ? словить OptimisticLockingException и пойти дальше получается нельзя.