Spring Batch создает несколько файлов .Gradle на основе проекта - PullRequest
0 голосов
/ 14 ноября 2018

Мне нужно создать 3 отдельных файла.

Задание My Batch должно считываться из Mongo, затем анализировать информацию и находить столбец «бизнес» (3 вида бизнеса: RETAIL, HPP, SAX), а затем создавать файл для своего бизнеса. файл должен создать либо RETAIL + formattedDate; HPP + formattedDate; SAX + formattedDate как имя файла и информация, найденная в БД внутри txt-файла. Кроме того, мне нужно установить .resource (новый FileSystemResource ("C: \ filewriter \ index.txt)) во что-то, что отправит информацию в нужное место, сейчас жесткое кодирование работает, но создает только один файл .txt.

пример:

 @Bean
public FlatFileItemWriter<PaymentAudit> writer() {
    LOG.debug("Mongo-writer");      
    FlatFileItemWriter<PaymentAudit> flatFile = new 
    FlatFileItemWriterBuilder<PaymentAudit>()
            .name("flatFileItemWriter")
            .resource(new FileSystemResource("C:\\filewriter\\index.txt)) 
         //trying to create a path instead of hard coding it
            .lineAggregator(createPaymentPortalLineAggregator())
            .build();
    String exportFileHeader = 
   "CREATE_DTTM";
    StringHeaderWriter headerWriter = new 
    StringHeaderWriter(exportFileHeader);
    flatFile.setHeaderCallback(headerWriter);
    return flatFile;

}

Моя идея была бы что-то вроде, но не уверен, куда идти:

public Map<String, List<PaymentAudit>> getPaymentPortalRecords() {
List<PaymentAudit> recentlyCreated = 
PaymentPortalRepository.findByCreateDttmBetween(yesterdayMidnight,
        yesterdayEndOfDay);

List<PaymentAudit> retailList = new ArrayList<>();
List<PaymentAudit> saxList = new ArrayList<>();
List<PaymentAudit> hppList = new ArrayList<>();
//String exportFilePath = "C://filewriter/";??????
recentlyCreated.parallelStream().forEach(paymentAudit -> {
    if (paymentAudit.getBusiness().equalsIgnoreCase(RETAIL)) {
        retailList.add(paymentAudit);
    } else if 
(paymentAudit.getBusiness().equalsIgnoreCase(SAX)) {
        saxList.add(paymentAudit);
    } else if 
(paymentAudit.getBusiness().equalsIgnoreCase(HPP)) {
        hppList.add(paymentAudit);
    }
});

1 Ответ

0 голосов
/ 15 ноября 2018

Чтобы создать файл для каждого типа бизнес-объекта, вы можете использовать ClassifierCompositeItemWriter. В вашем случае вы можете создать средство записи для каждого типа и добавить их в качестве делегатов в средство записи составного элемента.

Что касается динамического создания имени файла, вам необходимо использовать средство записи с шагом. В разделе справочной документации Step Scope приведен пример.

Надеюсь, это поможет.

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