Spring 用于 websphere 应用程序服务器上的 tasklet 执行的批处理挂起事务 (NOT_SUPPORTED)
Spring Batch suspend transaction (NOT_SUPPORTED) for tasklet execution on websphere application server
下面是我们的应用程序是如何为 Spring 批处理配置的。
Spring batch 和Quartz 相关的表配置在单独的实例上。
特定于应用程序的数据库实例是不同的。
应用程序在 WebSphere Application Server 8.0
上运行
我们不希望 spring 批处理事务传播到 tasklet 执行。实现这一点是我们尝试过的,但它似乎不起作用。
有没有人遇到过类似的问题?请建议如何进行。
交易没有暂停。 Spring使用ConnectionHolder缓存连接,如果在事务下不释放连接。我们不希望缓存连接,我们希望从数据源(连接池)获取新连接而不是使用 spring 缓存连接句柄。
<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"/>
谢谢。
真正处理此问题的最佳方法是使用一个独立的、特定于应用程序的数据源,该数据源与您当前参与的事务无关。这首先防止正在使用的连接成为事务的一部分。
下面是我们的应用程序是如何为 Spring 批处理配置的。
Spring batch 和Quartz 相关的表配置在单独的实例上。 特定于应用程序的数据库实例是不同的。 应用程序在 WebSphere Application Server 8.0
上运行我们不希望 spring 批处理事务传播到 tasklet 执行。实现这一点是我们尝试过的,但它似乎不起作用。 有没有人遇到过类似的问题?请建议如何进行。
交易没有暂停。 Spring使用ConnectionHolder缓存连接,如果在事务下不释放连接。我们不希望缓存连接,我们希望从数据源(连接池)获取新连接而不是使用 spring 缓存连接句柄。
<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"/>
谢谢。
真正处理此问题的最佳方法是使用一个独立的、特定于应用程序的数据源,该数据源与您当前参与的事务无关。这首先防止正在使用的连接成为事务的一部分。