gpt4 book ai didi

java - 如何将JOOQ与SpringBatch JdbcTemplate同步

转载 作者:行者123 更新时间:2023-11-30 04:04:31 39 4
gpt4 key购买 nike

我正在使用 Spring Batch 并尝试使用两个“ORM”框架构建 TASKLET:使用 jdbcTemplate 进行简单查询,使用 JOOQ 框架进行更复杂的查询。

这是 spring 配置的一部分:

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSourceDbcp_MySQL" />
</bean>
<bean id="jobRepository" class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
<property name="transactionManager" ref="transactionManager" />
</bean>
<bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
</bean>
<job id="importProductsJob" xmlns="http://www.springframework.org/schema/batch">
<step id="readWrite">
<tasklet transaction-manager="transactionManager">
<chunk reader="multiResourceReader"
processor="itemProcessor"
writer="itemWriter"
commit-interval="250" />
</tasklet>
</step>
</job>
<bean id="itemWriter" class="com.myexample.writer.JdbcSequenceWriter">
<property name="dataSourceTransactionManager" ref="transactionManager" />
<!-- and some more specific properties -->
</bean>

我在 com.myexample.writer.JdbcSequenceWriter 的 setter 中初始化我的 ORM:

private JdbcTemplate jdbcTemplate;
private JdbcTemplate jdbcTemplate2;
private DSLContext dslContext;

public void setDataSourceTransactionManager(DataSourceTransactionManager trxManager) {
this.jdbcTemplate = new JdbcTemplate(trxManager.getDataSource());
this.jdbcTemplate2 = new JdbcTemplate(trxManager.getDataSource());
dslContext = DSL.using(trxManager.getDataSource(), SQLDialect.MYSQL);
}

两个 jdbcTemplate 都有一个 session ,我可以使用“jdbcTemplate”插入一条记录,并使用带有“jdbcTemplate2”的 SELECT 查找该记录。但是,如果尝试使用任何“jdbcTemplate”插入记录并使用 dslContext (JOOQ ORM) 找到它,我会得到空结果。我不明白 Spring Batch 使用一些棘手的事务管理器,如果“编写器”无法完成所有操作,则回滚所有操作。但是如何将另一个框架与单个事务管理器同步?

最佳答案

通常预期的行为是您在 JdbcTemplatedslContext 之间观察到的行为:每个都从 DataSource< 获取单独的数据库连接.

您的第一个发现(有两个 JdbcTemplate 实例)是JdbcTemplate 必须专门设计的特殊行为。显然,它的所有实例在内部共享相同的连接。

您可以通过首先从 DataSource 获取 JDBC Connection 然后将其传递给 JdbcTemplatedslContext。这不是受支持的使用模式,并且可能仍然存在问题。

一旦您获得了连接,您自然也要负责释放它。

关于java - 如何将JOOQ与SpringBatch JdbcTemplate同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21080295/

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