Java 使用camel从数据库读取并写入文件

Java 使用camel从数据库读取并写入文件,java,apache-camel,Java,Apache Camel,我想使用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 o

我想使用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;
    }
}
上面的程序运行良好,环境优雅地关闭。但是,不会创建目标文件。我做错了什么


我是Apache Camel的新手,非常感谢您的帮助。我在ApacheCamel 2.12.1中使用JDK7,没有使用Spring。

您可以看看SQL示例:然后写入文件,就是发送到文件,而不是像SQL示例那样调用bean


如果您想使用JDBC组件,那么它没有内置使用者,因此您需要使用计时器或quartz调度程序触发路由,以便每X时间运行一次路由。

此路由不会执行,因为它从
直接:
端点开始。
direct:
端点只能在另一个路由向其发送消息时触发。我不完全理解申请的要求。似乎您正在尝试实现一个控制台应用程序,它只将一些数据从数据库写入文件一次。但我认为camel更适合服务。由于您是camel的新手,我建议您阅读本文: