Spring Batch FlatFileItemWriter使用列表写入对象

时间:2018-12-04 20:36:17

标签: spring-batch itemwriter

我有一个Pojo合作伙伴: 合作伙伴ID 列表

地址Pojo: 地址编号 地址, 市, 国家, 固定

我想在Spring Batch中创建平面文件 -文件将是 :PartnerId; AddressId; Address; City; Country; Pin

我正在获取带有ID和地址列表的合作伙伴Pojo

如何将FlatFileItemWriter与PartnerPojo一起使用 我的FlatFileItemWriterConfiguration配置:

DECLARE @abc varchar(max)= '\\Abc\Abc\Abc\Abc\Abc\Abc\ERROR.docx'
select SUBSTRING(@abc,LEN(@abc)-9,LEN(@abc) )

我在addressId上遇到错误

1 个答案:

答案 0 :(得分:0)

您需要拼合数据,并按预期将输出文件中的平面项目列表传递给编写器。例如:

class Partner {
   int id;
   List<Address> addresses;
}

class Address {
   int addressId;
   String address,city,country,pin;
}

// create this Pojo to encapsulate flat data (as in the expected csv)
class PartnerAddress {
   int partnerId, addressId;
   String address,city,country,pin;
}

项目处理器将准备数据:

class PartnerItemProcessor implements ItemProcessor<Partner, List<PartnerAddress>> {

    @Override
    public List<PartnerAddress> process(Partner partner) {
        List<PartnerAddress> partnerAddresses = new ArrayList<>();
        for (Address address : partner.getAddresses()) {
            PartnerAddress partnerAddress = new PartnerAddress();
            partnerAddress.setPartnerId(partner.getId());
            partnerAddress.setAddressId(address.getAddressId());
            partnerAddress.setAddress(address.getAddress());
            partnerAddress.setCity(address.getCity());
            partnerAddress.setCountry(address.getCountry());
            partnerAddress.setPin(address.getPin());
            partnerAddresses.add(partnerAddress);
        }
        return partnerAddresses;
    }
}

然后,编写者将收到PartnerAddress的列表,并将其写入平面文件。

希望这会有所帮助。