2013-06-04 1 views
0

Я использую весеннюю партию. в методе чтения читателя элемента, вызывающего хранимую процедуру. Как только мы получим результат из хранимой процедуры, он возвращается к писателю. но опять же он будет читать метод. поэтому чтение выполняется повторно.Весенняя партия Редактор товаров повторить выполнение вопроса

Может ли кто-нибудь предложить, как я могу ограничить метод чтения одним вызовом только для выполнения задания.

* Примечание: StoredprocedureitemReader не является нашим требованием. мы должны использовать itemreader только для чтения

Пожалуйста, помогите в этом

ответ

0

Если я вас правильно понял, вы должны прочитать один раз, и писать много раз. Вы можете сделать это, используя процедуру хранилища, чтобы получить результаты при первом вызове метода read() и все оставшиеся времена, когда вы возвращали объекты, которые были прочитаны, один за другим.

0

вот пример читателя, который однажды загружает очередь элементов и читает из одной очереди. Это аналогично вашему варианту использования одного вызова хранимой процедуры и нескольких «записей».

package de.incompleteco.spring.batch.item; 

import java.util.PriorityQueue; 
import java.util.Queue; 
import java.util.UUID; 

import org.springframework.batch.item.ItemReader; 
import org.springframework.batch.item.NonTransientResourceException; 
import org.springframework.batch.item.ParseException; 
import org.springframework.batch.item.UnexpectedInputException; 

import de.incompleteco.spring.batch.domain.Record; 

public class SingleItemReader implements ItemReader<Record> { 

    private Queue<String> values = null; 

    public Record read() throws Exception, UnexpectedInputException,ParseException, NonTransientResourceException { 
     //check the queue 
     if (values == null) { 
      //load 
      loadQueue(); 
     }//end if 
     //return 
     return getRecord(values.poll()); 
    } 

    private Record getRecord(String value) { 
     //init 
     Record record = null; 
     //check for null 
     if (value != null) { 
      record = new Record(); 
      record.setId(UUID.randomUUID()); 
      record.setValue(value); 
     }//end if 
     //return 
     return record;  
    } 

    private synchronized void loadQueue() { 
     //generate a bunch of data and add to the queue 
     if (values == null) { 
      System.out.println("calling load of the queue"); 
      values = new PriorityQueue<String>(); 
      for (int i=0;i<100;i++) { 
       values.add("hello " + i); 
      }//end for 
     }//end if 
    } 

} 

вот автор на примере

package de.incompleteco.spring.batch.item; 

import java.util.List; 

import org.springframework.batch.item.ItemWriter; 

import de.incompleteco.spring.batch.domain.Record; 

public class SystemItemWriter implements ItemWriter<Record> { 

    public void write(List<? extends Record> items) throws Exception { 
     System.out.println("starting write..."); 
     System.out.println(items); 
     System.out.println("...finished write"); 
    } 

} 

конфигурация партии заключается в следующем;

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:batch="http://www.springframework.org/schema/batch" 
    xmlns:task="http://www.springframework.org/schema/task" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"> 

    <batch:job id="singleReadJob"> 
     <batch:step id="singleReadJob.step1"> 
      <batch:tasklet> 
       <batch:chunk reader="singleReader" writer="multiWriter" commit-interval="10"/> 
      </batch:tasklet> 
     </batch:step> 
    </batch:job> 

    <bean id="singleReader" class="de.incompleteco.spring.batch.item.SingleItemReader"/> 

    <bean id="multiWriter" class="de.incompleteco.spring.batch.item.SystemItemWriter"/> 

    <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"/> 
     <property name="taskExecutor" ref="taskExecutor"/> 
    </bean> 

    <bean id="jobExplorer" 
     class="org.springframework.batch.core.explore.support.MapJobExplorerFactoryBean"> 
     <property name="repositoryFactory" ref="&amp;jobRepository"/> 
    </bean> 

    <task:executor id="taskExecutor"/> 

    <bean id="transactionManager" 
     class="org.springframework.batch.support.transaction.ResourcelessTransactionManager"/> 
</beans>