使用 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();
}
我正在尝试读取文件,但我需要使用 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();
}