2016-04-25 2 views
0

Я тщательно искал документы Spring и поддерживающие сайты, но не нашел и не ответил на этот запрос; если я хочу получить доступ и сохранить некоторые значения в ExecutionContext, мне нужно написать собственные базы данныхItemReader и ItemWriter, которые реализуют ItemStream или я могу использовать «готовые» читатели и писатели и редактировать бобы весной -batch-context.xml для этого? Будем очень благодарны за любые примеры кода. Благодаря!Spring Batch persist data from step1 to step2

http://www.springframework.org/schema/batch/spring-batch-3.0.xsd http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsd «>

<import resource="classpath:context-datasource.xml" /> 

<!-- JobRepository and JobLauncher are configuration/setup classes --> 
<bean id="jobRepository" 
    class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean" /> 

<bean id="jobLauncher" 
    class="org.springframework.batch.core.launch.support.SimpleJobLauncher"> 
    <property name="jobRepository" ref="jobRepository" /> 
</bean> 


<!-- ItemReader which reads from database and returns the row mapped by 
    rowMapper --> 
<bean id="databaseItemReader" 
    class="org.springframework.batch.item.database.JdbcCursorItemReader"> 

    <property name="dataSource" ref="dataSource" /> 

    <property name="sql" 
     value="SELECT PartnerID, ftpUserName, ftpPassword, ftpPath, jobRunTime, jobFrequency FROM tblRosterJobParams" /> 

    <property name="rowMapper"> 
     <bean class="com.explorelearning.batch.ParamResultRowMapper" /> 
    </property> 

</bean> 


<!-- This was supposed to change to a SavingItemWriter that persists these values to the Step ExecutionContext --> 
<bean id="flatFileItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" 
    scope="step"> 

    <property name="resource" value="file:csv/ParamResult.txt" /> 

    <property name="lineAggregator"> 

     <!--An Aggregator which converts an object into delimited list of strings --> 
     <bean 
      class="org.springframework.batch.item.file.transform.DelimitedLineAggregator"> 

      <property name="delimiter" value="," /> 

      <property name="fieldExtractor"> 

       <!-- Extractor which returns the value of beans property through reflection --> 
       <bean 
        class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor"> 
        <property name="names" value="PartnerID" /> 
       </bean> 
      </property> 
     </bean> 
    </property> 
</bean> 

<!-- Optional JobExecutionListener to perform business logic before and after the job --> 
<bean id="jobListener" class="com.explorelearning.batch.RosterBatchJobListener" /> 

<!-- Optional StepExecutionListener to perform business logic before and after the job --> 
<bean id="stepExecutionListener" class="com.explorelearning.batch.ParamResultStepExecutionListener" /> 

<!-- Optional ItemProcessor to perform business logic/filtering on the input records --> 
<bean id="itemProcessor" class="com.explorelearning.batch.ParamResultItemProcessor" /> 

<!-- Step will need a transaction manager --> 
<bean id="transactionManager" 
    class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" /> 

<!-- Actual Job --> 
<batch:job-repository id="jobRepository" data-source="dataSource" table-prefix="BATCH_" 
    transaction-manager="transactionManager" isolation-level-for-create="SERIALIZABLE" /> 
<batch:job id="RosterBatchJob" job-repository="jobRepository"> 
<batch:step id="readParams" > 
    <batch:tasklet transaction-manager="transactionManager" allow-start-if-complete="true"> 
     <batch:chunk reader="databaseItemReader" writer="flatFileItemWriter" 
      processor="itemProcessor" commit-interval="10" /> 
    </batch:tasklet> 
</batch:step> 
<!--<batch:step id="grabCSVs" next="validateCSVs"> 

</batch:step> 
<batch:step id="validateCSVs" next="filterRecords"> 

</step> 
<batch:step id="filterRecords" next="determineActions"> 

</batch:step> 
    <batch:step id="determineActions" next="executeActions"> 

</batch:step> 
    <batch:step id="executeActions" next=""> 

</batch:step> --> 

</batch:job> 

ответ

0

Обновлено теперь, что вопрос имеет более подробно ...

Хорошо, как я читаю файл контекста, вам необходимо:

  1. Получить некоторую FTP логин информацию из базы данных
  2. Скачать некоторые CSV файлы
  3. Validate файлы (на уровне файлов? или просто записать на уровне проверки?)
  4. фильтр некоторые мусора записи
  5. Определить некоторые «действия»
  6. Выполнить некоторые «действия»

Лучший способ сделать это (на мой взгляд) создать следующие шаги:

  1. Шаг 1: простой Tasklet, который запрашивает базу данных для FTP входа в информации, а затем загружает файлы CSV в локальную папку
  2. Шаг 2: Разделенный шаг, который создает один раздел за CSV в папке
    1. Каждый раздел будет иметь читателя (FlatFileItemReader), который считывает записи.
    2. Записи затем перейдут на ItemProcessor, который возвращает null, если запись является мусором.
    3. Допустимые элементы будут записаны в некоторой промежуточной таблицы БД для дальнейших действий
    4. При желании вы можете использовать ClassifierItemWriter сделать что-то ж/бросовых записей
  3. Шаг 3: Следующий шаг считывает действительные данные в таблица постановка и делает «Действия»
  4. Шаг 4: Может быть, еще один шаг, чтобы сделать что-то с нежелательной записи
+0

Спасибо Дина! Я сделаю это и дам вам знать, как получилось! –

+0

Дин, Так получилось, что у меня уже был слушатель, поэтому я добавил предложенный listgener к своему шагу, но я получаю эту ошибку: –

+0

cvc-complex-type.2.4.a: Неверный контент был найден, начиная с элемента ' слушателей. Один из «{» http: // www.springframework.org/schema/batch":transaction-attributes, «http: // www.springframework.org/schema/batch":no-rollback-exception-classes, "http: // www.springframework.org/schema/batch ": слушатели," http://www.springframework.org/schema/ beans ": bean," http://www.springframework.org/schema/beans":ref} ". –

Смежные вопросы