Весенняя партия может вернуть классификатору несколько писателей - PullRequest
0 голосов
/ 03 марта 2020

Я новичок в весенней партии. У меня большой мастер-стол. Эта основная таблица объединяется в 5 отдельных таблиц. Мне необходимо создать модуль записи, который будет записывать в эти 5 отдельных таблиц. Но эти записи будут вызываться в зависимости от условия. Например: если у меня есть поле, которое не задано в основной таблице, я вызову двух авторов и пропущу остальные 3.

Я использовал составной модуль записи с классификатор для проверки условия, но классификатор возвращает только 1 писатель. Может ли классификатор вернуть несколько авторов или есть какой-либо другой класс, который может удовлетворить мое требование?

1 Ответ

1 голос
/ 03 марта 2020

Вы можете создать пользовательский ItemWriter, который объединит несколько ItemWriter для обработки определенного c случая. Например, предположим, что есть два случая, которые требуют различного ItemWriter. Case1 требует записи в table1 и table2:

@Component
public class Case1ItemWriter implements ItemWriter<Foo> {

    @Autowired
    private JdbcBatchItemWriter writer1;  //write to table1

    @Autowired
    private JdbcBatchItemWriter writer2;  //write to table2

    @Override
    public void write(List<? extends T> items) throws Exception{
        writer1.write(items);
        wrtire2.write(items)
    }
}

И case2 требует записи в table3 и table4:

@Component
public class Case2ItemWriter implements ItemWriter<Foo> {

    @Autowired
    private JdbcBatchItemWriter writer3;  //write to table3

    @Autowired
    private JdbcBatchItemWriter writer4;  //write to table4

    @Override
    public void write(List<? extends T> items) throws Exception{
        writer3.write(items);
        wrtire4.write(items)
    }
}

Затем реализует Classifier, чтобы определить различные случаи для возврата их собственные ItemWriter:

@Component
public class MyClassifier implements Classifier<Foo ,ItemWriter<Foo>> {

    @Autowired
    private Case1ItemWriter case1ItemWriter;

    @Autowired
    private Case2ItemWriter case2ItemWriter;  

    @Override
    public ItemWriter<Foo> classify(Foo foo){

      if(foo.isBlabBlaBla()){
        return case1ItemWriter;
      }else{
        ......
        return case2ItemWriter;
      }
    }
}

и настройте этот Classifier для ClassifierCompositeItemWriter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...