Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将JOOQ与SpringBatch JdbcTemplate同步_Java_Spring Batch_Jooq_Transactionmanager - Fatal编程技术网

Java 如何将JOOQ与SpringBatch JdbcTemplate同步

Java 如何将JOOQ与SpringBatch JdbcTemplate同步,java,spring-batch,jooq,transactionmanager,Java,Spring Batch,Jooq,Transactionmanager,我正在使用Spring batch,并尝试使用两个“ORM”框架构建TASKLET: 使用jdbcTemplate进行简单查询,使用JOOQ框架进行更复杂的查询 以下是spring配置的一部分: <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="da

我正在使用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>
两个jdbcTemplate都有一个会话,我可以使用“jdbcTemplate”插入一条记录,并使用带有“jdbcTemplate2”的SELECT查找该记录。但是,如果尝试插入一个带有任何“jdbcTemplate”的记录,并使用dslContext(JOOQ-ORM)查找它,我得到的结果是空的。 我无法理解Spring批处理使用了一些棘手的事务管理器,如果“writer”无法完成所有操作,它将回滚所有操作。但是如何将另一个框架与单个事务管理器同步?

通常预期的行为是您在
JdbcTemplate
dslContext
之间观察到的行为:每个框架都从
数据源
获取单独的DB连接

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

通过首先从
数据源
获取JDBC
连接
,然后将其传递给
JdbcTemplate
dslContext
,您可以(可能)实现这两种功能。这不是受支持的使用模式,可能仍然存在问题


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

只是检查一下:您是如何配置该数据源的?约克
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);
}