Camel - 将 csv 文件加载到数据库中 - 在文件名中包含日期作为额外列
Camel - Load csv file into database - Include date in the filename as an extra column
我正在尝试在 Camel 中编写一个 ETL 过程以将 csv 文件加载到数据库中。每天在特定的远程位置都会有一个新文件,我可以通过 sftp 访问它。现在为了简化问题,我假设这个文件夹是本地的,可以使用 camel 的文件组件访问。
文件名包含创建日期,我想将其提取并作为额外列添加到数据库中。
即文件名是 "FileA-20140224.csv".
我想使用休眠。
能否请您更好地告诉我如何使用 Camel 实现这一目标并帮助我进行设置?
如何将文件加载到数据库中并填充文件中未包含的额外列?
private static class MyRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
from("file:/.?include=FileA-20140224.csv")
.log(LoggingLevel.INFO, "${file:name}")
.convertBodyTo(FileData.class)
.to("jpa:com.domain.entity.FileData");
}
}
非常感谢
实现它的一种方法如下。
private static class MyRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
from("file:/.?include=FileA-20140224.csv")
.log(LoggingLevel.INFO, "${file:name}")
.unmarshal()
.bindy(BindyType.Csv, FileData.class)
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
String fileName = (String) exchange.getIn().getHeader("CamelFileNameOnly");
// extract date from file name
List<FileData> data = (List<FileData>) exchange.getIn().getBody();
// go through the stream and set the extra column equal to the extracted date from the filename
// dataDao.save(data);
}
})
}
}
为了使用 bindy,您必须使用 @CsvRecord 注释 FileData 并使用 @DataField 注释文件中包含的每个字段。
我正在尝试在 Camel 中编写一个 ETL 过程以将 csv 文件加载到数据库中。每天在特定的远程位置都会有一个新文件,我可以通过 sftp 访问它。现在为了简化问题,我假设这个文件夹是本地的,可以使用 camel 的文件组件访问。
文件名包含创建日期,我想将其提取并作为额外列添加到数据库中。 即文件名是 "FileA-20140224.csv".
我想使用休眠。
能否请您更好地告诉我如何使用 Camel 实现这一目标并帮助我进行设置?
如何将文件加载到数据库中并填充文件中未包含的额外列?
private static class MyRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
from("file:/.?include=FileA-20140224.csv")
.log(LoggingLevel.INFO, "${file:name}")
.convertBodyTo(FileData.class)
.to("jpa:com.domain.entity.FileData");
}
}
非常感谢
实现它的一种方法如下。
private static class MyRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
from("file:/.?include=FileA-20140224.csv")
.log(LoggingLevel.INFO, "${file:name}")
.unmarshal()
.bindy(BindyType.Csv, FileData.class)
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
String fileName = (String) exchange.getIn().getHeader("CamelFileNameOnly");
// extract date from file name
List<FileData> data = (List<FileData>) exchange.getIn().getBody();
// go through the stream and set the extra column equal to the extracted date from the filename
// dataDao.save(data);
}
})
}
}
为了使用 bindy,您必须使用 @CsvRecord 注释 FileData 并使用 @DataField 注释文件中包含的每个字段。