Lote de Primavera. Como obter o número do elemento que está sendo processado
Estamos armazenando os elementos de um arquivo XML em nosso banco de dados usando o lote de primavera. É possível recuperar o número do elemento que está sendo processado ao inseri-lo no banco de dados?
Para esclarecer, esta é a minha configuração de trabalho:
<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>
Como você pode ver, tentamos obter esse número usandostepExecution.writeCount, mas sempre retorna 0, também com a propriedade readCount.
Uma sequência de banco de dados não é a solução, pois deve ser o número dentro do arquivo XML atual, começando com 0.
Ele deve ser independente da parte que está sendo processada porque a confirmação automática. Nossa confirmação automática é 1000. Se tivermos 10000 elementos, precisamos armazenar os números de 0 a 9999, e não 10 grupos de 0 a 999.
A ordem dentro do arquivo XML não é importante, basta numerar os elementos.
Qualquer ajuda? obrigado