Spring Batch приостановить транзакцию (NOT_SUPPORTED) для выполнения тасклета на сервере приложений websphere
Вот как настроено наше приложение для Spring batch.
Таблицы Spring Batch и Quartz настроены на отдельном экземпляре. Экземпляры БД для конкретных приложений отличаются. Приложение работает на сервере приложений WebSphere 8.0
Мы не хотим, чтобы весенняя пакетная транзакция распространялась на выполнение тасклетов. Для достижения этой цели мы пытались, но, похоже, это не сработало. Кто-нибудь сталкивался с подобной проблемой? Пожалуйста, предложите, как поступить.
Транзакция не приостанавливается. Spring кэширует соединение с помощью ConnectionHolder и не освобождает соединение, если оно находится в транзакции. Мы не хотим, чтобы соединение кэшировалось, и мы хотим получить новое соединение из источника данных (пул соединений) вместо использования дескриптора пружинного кэширования соединения.
<batch:job id="jobId" job-repository="jobRepository">
<batch:step id="stepId">
<batch:tasklet ref="taskletId">
<batch:transaction-attributes propagation="NOT_SUPPORTED" />
</batch:tasklet>
</batch:step>
</batch:job>
<bean id="transactionManager" class="org.springframework.transaction.jta.WebSphereUowTransactionManager"/>
Благодарю.
1 ответ
Действительно лучший способ справиться с этим - использовать отдельный источник данных, специфичный для приложения, который не привязан к транзакции, частью которой вы в данный момент являетесь. Это в первую очередь не позволяет используемому соединению быть частью транзакции.