gpt4 book ai didi

java - Spring Batch DataSourceTransactionManager 在 Oracle 上失败

转载 作者:行者123 更新时间:2023-12-04 05:02:03 30 4
gpt4 key购买 nike

我正在将 WebLogic 10.3.3 与 Oracle 11g 一起使用,一旦我从 Spring ResourcelessTransactionManager 切换,就会面临 Spring Batch 的奇怪问题。 (主要用于测试)到生产 DataSourceTransactionManager .首先我使用了 WebLogics 默认驱动程序 oracle.jdbc.xa.client.OracleXADataSource但是这个失败了,因为 Spring 无法设置隔离级别 - 这也被记录在案 here .

我对此很好,因为无论如何我都不需要全局事务,所以我切换到 oracle.jdbc.driver.OracleDriver .现在我收到错误消息

ORA-01453: SET TRANSACTION must be first statement of transaction

我没有找到很多关于此的信息,有一个错误,但很久以前就应该在 Oracle 7 中修复。看起来事务是在 (?) 实际作业被添加到 JobRepository 之前启动的,并且没有正确关闭或类似的东西。

最佳答案

JobI 能够通过将所有事务的隔离级别设置为 READ_COMMITTED 来解决此问题。 .默认情况下,Spring 将其设置为 SERIALIZABLE这是非常严格的(但完全没问题)。这在我的机器上不起作用,尽管 Oracle 应该支持它:

http://www.oracle.com/technetwork/issue-archive/2005/05-nov/o65asktom-082389.html

这是我的代码 - 首先是配置:

<bean id="jobRepository" class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">
<property name="transactionManager" ref="transactionManager" />
<property name="dataSource" ref="dataSource" />
<property name="isolationLevelForCreate" value="ISOLATION_READ_COMMITTED" />
</bean>

...这是工作本身(简化):
public class MyFancyBatchJob {
@Transactional(isolation=Isolation.READ_COMMITTED)
public void addJob() {
JobParameters params = new JobParametersBuilder().toJobParameters();
Job job = jobRegistry.getJob("myFancyJob");
JobExecution execution = jobLauncher.run(job, params);
}
}

关于java - Spring Batch DataSourceTransactionManager 在 Oracle 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16036536/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com