我已经编写了使用Camel将文件从源目录移动到目标目录的路由。我需要一些帮助将这些文件移动到数据库。这是将文件从一个目录移动到另一个目录的路径:
private static RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
public void configure() {
from("file:data/outbox?idempotent=true&idempotentKey=${file:name}-${file:size}&noop=true&readLock=changed&delete=true")
.choice()
.when(header("CamelFileName").endsWith(".log"))
.process(new Processor() {
public void process(Exchange exchange) {
logger.log(Level.INFO, "File: " + exchange.getIn().getHeader("CamelFileName") + " has been updated");
}
})
.to("file:data/log");
}
};
}
如何修改此路由以使用SqlComponent等组件将文件插入数据库?我试图在Spring Boot应用程序中使用H2数据库来执行此操作。
答案 0 :(得分:1)
替换:
.to("file:data/log");
带
.setBody(constant("select * from your query"))
.to("jdbc:yourdatabase")
同时添加此依赖项:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jdbc</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
答案 1 :(得分:1)
基本上,您的邮件正文是一个文件。你必须坚持这一点。从理论上讲,你可以把它传递给一个可以做任何事情的处理器,包括坚持到任何地方。使用更多标准的Camel组件,您可以使用camel-jdbc,camel-sql或camel-jpa。
使用camel-sql:
代码如下所示:
from("file://c:/test/in1a?noop=true")
.convertBodyTo(String.class)
.setProperty("fileName", simple("${header.CamelFileAbsolutePath}"))
.setProperty("fileContents", body())
.to("sql:insert into TEST1.FILE_UPLOAD (FILE_NAME, FILE_CONTENTS)
VALUES(:#${property.fileName}
, :#${property.fileContents})?dataSource=dsTest1");
从下到上:
您可能会注意到该插入还有一个命名数据源的选项。此名称(dsTest1)需要可用。就我而言,我在Spring配置中有以下内容:
<bean name="dsTest1"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test1" />
<property name="username" value="user01" />
<property name="password" value="password01" />
</bean>
<bean name="route07Bean" class="com.mycompany.RouteBuilder07" />
<camelContext xmlns="http://camel.apache.org/schema/spring">
</camelContext>
POM的依赖关系是:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-sql</artifactId>
<version>${camel-version}</version>
</dependency>