1

我正在一个使用 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。现在我需要使用与请求中的数据相对应的休眠从 Oracle 获取数据。我不知道该怎么做?我应该怎么做意味着配置会话工厂并使用它来获取数据。

有人可以指导我吗?

4

2 回答 2

2

您可以在示例休眠作业中使用HibernateCursorItemReader

<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>
于 2013-01-23T15:59:42.740 回答
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;
    }

}
于 2021-06-17T10:12:50.590 回答