我们使用spring批处理将XML文件的元素存储到我们的数据库中。是否可以在将数据插入数据库时检索正在处理的元素的数量?
要清除,这是我的工作配置:
<bean id="xmlItemReader" scope="step"
class="org.springframework.batch.item.xml.StaxEventItemReader">
<property name="fragmentRootElementName" value="person" />
<property name="resource" value="#{jobParameters[xmlPath]}" />
<property name="unmarshaller" ref="personUnmarshaller" />
</bean>
<!-- Read and map values to object, via jaxb2 -->
<bean id="personUnmarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound">
<list>
<value>com.batch.input.Person</value>
</list>
</property>
</bean>
<bean id="personItemWriter" scope="step"
class="org.springframework.batch.item.database.JdbcBatchItemWriter">
<property name="dataSource" ref="dataSource" />
<property name="sql">
<value>
<![CDATA[
insert into PERSON (
ID_XML, PERSON_ID, ITEM_NUM,
NAME, SURNAME1, SURNAME2)
values (
#{jobParameters[ID_XML]}, :personID,
#{stepExecution.writeCount}, -- This is what we want
:name, :surname1, :surname2)
]]>
</value>
</property>
<!-- It will take care matching between object property and sql name parameter -->
<property name="itemSqlParameterSourceProvider">
<bean
class="org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider" />
</property>
</bean>
正如您所看到的,我们尝试使用 stepExecution.writeCount 来获取此数字,但它始终返回0,同时使用readCount属性。
数据库序列不是解决方案,因为它必须是当前XML文件中的数字,从0开始。
它必须独立于正在处理的块,因为自动提交。我们的自动提交是1000.如果我们有10000个元素,我们需要存储从0到9999的数字,而不是从0到999的10个组。
XML文件中的顺序并不重要,我们只需要对元素进行编号。
有任何帮助吗?感谢