2015-10-19 4 views
0

Я новичок в этой технологии Spring-Batch, пожалуйста, помогите в том, как передавать динамический список при запуске приложения в ListItemReader и хранить его в MySql DB.Весенняя партия - как передать динамический список при запуске приложения в ListItemReader, чтобы сохранить его в базе данных

Ex. Я извлекаю некоторую ценность из БД и делаю некоторый расчет по этим извлеченным данным, и я готовлю один список, и этот новый список будет передан в ListItemReader и сохранит его в БД.

Благодарим за помощь.

ответ

0

Ниже приведены пользовательские реализации ListItemWriter и ListItemReader, которые позволяют определить свойство name. Это свойство используется в качестве ключа для хранения списка в JobExecutionContext.

В вашем случае, вы можете иметь 3 шага:

  1. JDBCReader> ListItemWriter
  2. Расчет тасклет
  3. ListItemReader> JDBCWriter

Если тасклет необходимо получить списки, вы может использоваться так же, как показано ниже (т.е. читать/записывать JobExecutionContext).

Читатель:

public class CustomListItemReader<T> implements ItemReader<T>, StepExecutionListener { 

    private String name; 
    private List<T> list; 

    @Override 
    public T read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException { 

     if (list != null && !list.isEmpty()) { 
      return list.remove(0); 
     } 
     return null; 
    } 

    @Override 
    public void beforeStep(StepExecution stepExecution) { 
     list = (List<T>) stepExecution.getJobExecution().getExecutionContext().get(name); 
    } 

    @Override 
    public ExitStatus afterStep(StepExecution stepExecution) { 
     return null; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

Автор:

public class CustomListItemWriter<T> implements ItemWriter<T>, StepExecutionListener { 

    private String name; 
    private List<T> list = new ArrayList<T>(); 

    @Override 
    public void write(List<? extends T> items) throws Exception { 
     for (T item : items) { 
      list.add(item); 
     } 
    } 

    @Override 
    public void beforeStep(StepExecution stepExecution) {} 

    @Override 
    public ExitStatus afterStep(StepExecution stepExecution) { 
     stepExecution.getJobExecution().getExecutionContext().put(name, list); 
     return null; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 
+0

Спасибо за ответ. Я попробую это решение и дам вам знать результат, и еще одна вещь, которую я хочу знать, должен ли я определять эти классы в файле xml-конфигурации весны? –

+0

@AmitKammar Нет, вам не нужно объявлять эти классы весной. – Thrax

+0

то как запустить эту работу? –