我是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”属性的协调下很好地使用“资源”属性。