使用 spring 集成 dsl 逐行读取文件

Read file line by line using spring integration dsl

我正在尝试读取文件,但我需要使用 Spring 集成 DSL 逐行拆分它。我需要添加到我的集成流程中才能使其正常工作

消息来源

 @Bean
    public MessageSource<File> sourceDirectory() {
        FileReadingMessageSource messageSource = new FileReadingMessageSource();
        messageSource.setDirectory(new File(fileSource));
        return messageSource;
    }

过滤器

@Bean
    public GenericSelector<File> onlyCSVs() {
        return (file) -> file.getName().endsWith(".csv");
    }

文件转换器

 @Bean
    public FileToStringTransformer fileToStringTransformer() {
        return new FileToStringTransformer();
    }

集成流程

@Bean
    public StandardIntegrationFlow integrationFlow() {
        return IntegrationFlows
                .from(sourceDirectory(), configurer -> configurer.poller(Pollers.fixedDelay(10000)))
                .channel("fileInputChannel")

                .filter(onlyCSVs())
                .transform(fileToStringTransformer())
                .handle(m -> System.out.println((String.valueOf(Math.random()) + m.getPayload())))
                .get();
    }

在你的 filetoString 转换器之后,我会添加另一个自定义转换器,它接受字符串并制作一个这样的数组。

String.split("[\r\n]+")

它已经删除了空行,然后我会在流中添加一个 .split() 以便它为每一行创建一条消息,.split() 已经与迭代器一起使用,以防只是转换数组到一个列表,你就完成了。

类似于:

@Bean
public StandardIntegrationFlow integrationFlow() {
    return IntegrationFlows
            .from(sourceDirectory(), configurer -> configurer.poller(Pollers.fixedDelay(10000)))
            .channel("fileInputChannel")

            .filter(onlyCSVs())
            .transform(fileToStringTransformer())
            .transform(GenericMessage.class, message -> message.getPayload().split("[\r\n]+"))
            .split()
            .handle(m -> System.out.println((String.valueOf(Math.random()) + m.getPayload())))
            .get();
}