我正在使用Spring批处理框架的项目中工作。我是新手。
我有一个任务,就像读取固定长度的平面文件长度,然后处理它并填充一些bean,然后使用请求中的一些值,我必须使用Oracle从数据库中获取数据,然后生成一些响应作为固定长度的平面文件。
我已粘贴在配置文件中的小代码段下面。
<bean name="tickerReader"
class="org.springframework.batch.item.file.FlatFileItemReader">
<property name="resource" ref="fileSystemResource" />
<property name="lineMapper" ref="tickerLineMapper" />
<bean>
..............................
..............................
<batch:job id="TickerPriceConversion">
<batch:step id="convertPrice">
<batch:tasklet transaction-manager="transactionManager">
<batch:chunk reader="tickerReader" processor="tickerPriceProcessor"
writer="simbeqResponseFlatFileWriter" commit-interval="10" >
</batch:chunk>
</batch:tasklet>
</batch:step>
</batch:job>
我已完成阅读部分,即读取请求文件并填充相应的bean。现在我需要使用与请求中的数据相对应的hibernate从Oracle获取数据。我不知道怎么做?我该怎么做才意味着配置会话工厂并使用它来获取数据。
有人可以指导我吗?
答案 0 :(得分:3)
您可以使用HibernateCursorItemReader
中的sample hibernate job<bean id="hibernateItemReader"
class="org.springframework.batch.item.database.HibernateCursorItemReader">
<property name="queryString" value="from CustomerCredit" />
<property name="sessionFactory" ref="sessionFactory" />
</bean>
要设置sessionFactory和事务管理器,您还可以查看示例hibernate-context
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingLocations" value="classpath*:/org/springframework/batch/sample/domain/**/*.hbm.xml" />
<property name="hibernateProperties">
<value>
<![CDATA[
hibernate.show_sql=true
hibernate.format_sql=true
]]>
</value>
</property>
</bean>
答案 1 :(得分:0)
@StepScope
@Slf4j
@Component
public class CursorItemReader extends HibernateCursorItemReader<ItemEntity> {
public CursorItemReader(EntityManagerFactory entityManagerFactory,
@Value("#{stepExecution}")StepExecution stepExecution) {
this.setName("CursorItemReader");
this.setSessionFactory(entityManagerFactory.createEntityManager().unwrap(org.hibernate.Session.class).getSessionFactory());
this.setQueryString("from ItemEntity");
this.setUseStatelessSession(true);
this.setFetchSize(5);
}
@Override
public ItemEntity read() throws Exception {
ItemEntity item = this.doRead();
return item;
}
}