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 注释文件中包含的每个字段。