Я разработал приложение SpringBatch и развернуто как веб-приложение в контейнере профиля Websphere Liberty. Пакетная программа предназначена для чтения записей из таблицы и вызова службы HTTP. На основе ответа службы столбец с именем status обновляется как тип RECORD_SENT/COMPLETE/ERROR.Сопоставление объекта JPA с несколькими сущностямиManagers с программой SpringBatch
Цель состоит в том, чтобы повторно использовать одну и ту же программу для нескольких источников данных. Источник данных передается в параметре задания с использованием типа клиента. Источники данных находятся в разных схемах, но имеют одинаковые данные.
Вопрос: Как менеджер транзакций может применяться во время выполнения внутри шага задания или Tasklet ?. Ищет помощь в этом отношении.
Конфигурация:
<bean id="entityManagerFactory1"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource1" />
<property name="persistenceUnitName" value="user" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="false" />
</bean>
</property>
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
</property>
</bean>
<bean id="entityManagerFactory2"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource2" />
<property name="persistenceUnitName" value="user" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="false" />
</bean>
</property>
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
</property>
</bean>
<bean id="entityManagerSelector" class="*com.spring.jpa.test.EntitymanagerSelector">
<property name="entityManagerFactory1" ref="entityManagerFactory1"></property>
<property name="entityManagerFactory2" ref="entityManagerFactory2"></property>
</bean>
job.xml snippet
<bean id="itemReader" class="org.springframework.batch.item.database.JpaPagingItemReader" scope="step">
<property name="entityManagerFactory" value="#{entityManagerSelector.getEntitymanagerForClient({jobParameters['client']})}" />
<property name="queryString" value="select u from User u where u.age > #{jobParameters['age']}" />
</bean>
Настройка параметров задания во время выполнения для идентификации клиента
JobParameters param = new JobParametersBuilder()
.addString("age", "20").addString("client", "client2")
.toJobParameters();
JobExecution execution = jobLauncher.run(job, param);
Большое спасибо Rajan V. Решение, предоставленное вами, сработало. – Narasi