Я работаю с Spring и пытаюсь создать TASKLET с двумя фреймами ORM: использовать jdbcTemplate для простых запросов и структуру JOOQ для более сложного запроса.Как синхронизировать JOOQ с SpringBatch JdbcTemplate
Вот часть из пружинной конфигурации:
<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>
Я инициализирует свои ORMS в инкубаторе в com.myexample.writer.JdbcSequenceWriter:
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 имеет одну сессию, и я могу ВСТАВИТЬ запись с использованием «jdbcTemplate» и найти эту запись с помощью SELECT с помощью «jdbcTemplate2». Но если попытаться ЗАПИСАТЬ запись с любым «jdbcTemplate» и найти ее с помощью dslContext (JOOQ ORM), у меня есть пустой результат. Я не понимаю, что Spring Batch использует какой-то хитрый менеджер tansaction, ведьма откатывает всю операцию, если «писатель» не может закончить все свои операции. Но как я могу синхронизировать другую структуру с одним менеджером транзакций?
Просто проверка: как вы настроили этот источник данных? В руководстве jOOQ [[] предлагается использовать «TransactionAwareDataSourceProxy» Spring (http://www.jooq.org/doc/3.4/manual/getting-started/tutorials/jooq-with-spring/) –