【问题标题】:Using hibernate in Spring batch to read dataSpring批处理中使用hibernate读取数据
【发布时间】:2013-01-22 13:54:56
【问题描述】:

我正在一个使用 Spring 批处理框架的项目中工作。我是新手。

我有一个任务,就像读取一个固定长度的平面文件长度,然后处理它并填充一些 bean,然后使用请求中的一些值,我必须使用 Oracle 从数据库中获取数据,然后生成一些响应作为固定长度的平面文件。

我在下面粘贴了配置文件中的小代码sn-p。

<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 获取数据。我不知道该怎么做?我应该怎么做意味着配置会话工厂并使用它来获取数据。

有人可以指导我吗?

【问题讨论】:

    标签: java spring-batch


    【解决方案1】:

    您可以像sample hibernate job 一样使用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>
    

    【讨论】:

    • 我昨天不小心对这个答案投了反对票,对不起,现在投票被锁定了! :( 你可以编辑它,以便我可以撤消我的否决吗?
    【解决方案2】:
    @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;
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-29
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 2015-11-13
      • 1970-01-01
      相关资源
      最近更新 更多