我想从数据库中读取并使用Camel将记录写入文件。以下是我的代码:
import javax.sql.DataSource;
import org.apache.camel.CamelContext;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.impl.SimpleRegistry;
import org.apache.commons.dbcp.BasicDataSource;
public class JDBCExampleSimpleRegistry {
public static void main(String[] args) throws Exception {
final String url = "jdbc:oracle:thin:@MYSERVER:1521:myDB";
DataSource dataSource = setupDataSource(url);
SimpleRegistry reg = new SimpleRegistry() ;
reg.put("myDataSource",dataSource);
CamelContext context = new DefaultCamelContext(reg);
context.addRoutes(new JDBCExampleSimpleRegistry().new MyRouteBuilder());
context.start();
Thread.sleep(5000);
context.stop();
}
class MyRouteBuilder extends RouteBuilder {
public void configure() {
String dst = "C:/Local Disk E/TestData/Destination/?fileName=output.txt";
from("direct:myTable")
.setBody(constant("select * from myTable"))
.to("jdbc:myDataSource")
.to("file://" + dst);
}
}
private static DataSource setupDataSource(String connectURI) {
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
ds.setUsername("sa");
ds.setPassword("devon1");
ds.setUrl(connectURI);
return ds;
}
}
以上程序运行正常,CamelContext优雅关闭。但是,不会创建目标文件。我做错了什么?
我是Apache Camel的新手,所以感谢任何帮助。我正在使用JDK7和Apache Camel 2.12.1,并且没有使用Spring。
答案 0 :(得分:2)
您可以查看SQL示例:http://camel.apache.org/sql-example.html然后写入文件,只是发送到文件而不是像sql示例那样调用bean。
如果你想使用JDBC组件,那么它没有内置的消费者,所以你需要使用计时器或石英调度程序来触发路由,每隔X次运行一次路由。