Spring批处理使用MultiResourceItemWriter编写多个XML文件

时间:2017-08-04 22:46:51

标签: java spring spring-mvc spring-batch batch-processing

我是Spring批处理的新手,并尝试为我要从数据库表中读取的每条记录编写多个XML文件。假设如果我读了10条记录,我需要创建10个XML文件。每个记录一个。 每个XML文件的名称应该是唯一的。为此,我打算使用“column_name1”值,但我不知道如何实现。如果有人可以帮助我,那将是一个很大的帮助。

更新

将#{formsPMVRowMapper.id}添加到资源属性,该属性可以指向DefaultOutboundIFMRowMapper(RowMapper的自定义实现),其中我创建了一个类级别变量来设置行ID。但它仍然没有工作,因为它甚至在进入mapRow方法之前尝试调用ID的getter,我认为这是正确的,但我不知道如何获取该ID,我可以将其用作multiXmlFileItemWriter中我的文件的资源名称。 有人可以告诉我这可能是正确的方法吗?

下面是我的Spring批处理配置文件。

    <util:properties id="batchProperties">
        <prop key="batch.output.file">${outbound.pmv.filename}</prop>
    </util:properties>

    <bean id="itemReader" parent="pagingItemReader">
        <property name="queryProvider" ref="outboundQueryProvider" />
        <property name="rowMapper" ref="pmvRowMapper" />
    </bean>

    <bean id="pmvRowMapper"
        class="tx.oag.cs.txcses.arch.batch.readers.DefaultOutboundIFMRowMapper">
        <property name="idName" value="outbound_locate_record_staging_id" />
    </bean>

    <bean id="outboundQueryProvider" class="org.springframework.batch.item.database.support.SqlPagingQueryProviderFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="selectClause"
            value="select column_name1" />
        <property name="fromClause" value="from table_name" />
        <property name="whereClause"
            value="where column_name1='AAA' and column_name1='bbbb'" />
        <property name="sortKey" value="column_name1" />
    </bean>

    <bean id="batchProcessor" parent="outboundStagingBatchProcessor">
        <property name="entityClass"
            value="Class_Name" />
    </bean>

    <bean id="itemWriter" parent="multiXmlFileItemWriter"/>

    <bean id="multiXmlFileItemWriter"
        class="org.springframework.batch.item.file.MultiResourceItemWriter">
        <property name="resource" value="${outbound.ifm.outbound}/#{pmvRowMapper.id}"> 
    </property>         
    <property name="delegate">
        <bean class="org.springframework.batch.item.xml.StaxEventItemWriter">
            <property name="marshaller">
                <bean class="tx.oag.cs.txcses.arch.batch.utils.XMLStringMarshaller" />
            </property>
        </bean>
    </property>
    <property name="itemCountLimitPerResource" value="1" />
    </bean>

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location"
            value="classpath:config/env/#{@env}/batch-outbound.properties" />
        <property name="properties" ref="batchProperties" />
        <property name="localOverride" value="true" />
    </bean>

据我所知,上面的“资源”属性只能写同名文件,但我不确定如何在“resourceSuffixCreator”属性的协调下很好地使用“资源”属性。

0 个答案:

没有答案