Я работаю над загрузчиком данных, который читает плоский файл, обрабатывает его и записывает в базу данных. В файлах dataloader.properties
содержится значение
LOAD=MM1,MM2,MM3,MM4,MM5...
Я должен прочитать этот файл свойств и, используя partition step
и partitioner
весеннего пакета, я хочу, чтобы все файлы в папке (MM1) выполняли чтение и запись в БД параллельно, любая ошибка БД для конкретного файла следует откатить содержимое этого файла, аналогично для других папок (MM2). Поскольку я новичок в Spring Batch, я хочу знать, как выполнить позднюю привязку для папки и имен файлов в файле конфигурации XML, с соответствующим откатом, необходимым , Я также хочу поделиться данными внутри раздела папки шаг
Ниже приводится примерная конфигурация работы, которая делает это. это правильный подход в соответствии с вышеуказанным требованием?
<!-- The Data Loading Configuration goes here -->
<job id="partition${jobname}Job" name="${jobname}" xmlns="http://www.springframework.org/schema/batch">
<step id="exchangestep" next="filestep">
<partition step="step1" partitioner="exchangepartitioner">
<handler grid-size="999" task-executor="taskExecutor" />
</partition>
</step>
<step id="filestep">
<partition step="step1" partitioner="filepartitioner">
<handler grid-size="99" task-executor="taskExecutor" />
</partition>
</step>
</job>
<bean id="folderpartitioner" class="org.springframework.batch.core.partition.support.MultiResourcePartitioner">
<property name="resources" value="#${folder}" />
</bean>
<bean id="filepartitioner" class="org.springframework.batch.core.partition.support.MultiResourcePartitioner">
<property name="resources" value="#${file}" />
</bean>
<bean id="taskExecutor" class="org.springframework.core.task.SyncTaskExecutor" />
<step id="step1" xmlns="http://www.springframework.org/schema/batch">
<tasklet transaction-manager="transactionManager">
<chunk writer="itemWriter" reader="itemReader" processor="itemProcessor" commit-interval="5000" />
</tasklet>
</step>
<bean id="itemReader" scope="step" autowire-candidate="false" parent="itemReaderParent">
<property name="resource" value="#{stepExecutionContext[fileName]}" />
</bean>
<bean id="multifileReader" class="org.springframework.batch.item.file.MultiResourceItemReader">
<property name="resources" value="#${filename}" />
<property name="delegate" ref="fileItemReader" />
</bean>
<bean id="fileItemReader" parent="itemReaderParent" />
<!-- CONFIGURE THE FLAT FILE ITEM READER TO READ INDIVIDUAL BATCH -->
<bean id="itemReaderParent" class="org.springframework.batch.item.file.FlatFileItemReader" abstract="true">
<property name="lineMapper">
<bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
<property name="lineTokenizer">
<bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
<property name="names" value="${columns}" />
<property name="columns" value="${range}" />
</bean>
</property>
<property name="fieldSetMapper">
<bean class="org.springframework.batch.item.file.mapping.FieldSetMapper">
<property name="targetType" value="DataLoaderMapper" />
</bean>
</property>
</bean>
</property>
</bean>