【问题标题】:How to use apache camel to read data from mysql table and write into another table如何使用apache camel从mysql表中读取数据并写入另一个表
【发布时间】:2014-11-28 20:53:20
【问题描述】:

伙计们,我正在使用 Apache Camel 从 mysql 表中读取数据。我在控制台上成功打印了它。但是根据我的要求,我需要从一个mysql数据库中读取数据,然后使用一些条件对其进行过滤,然后将过滤后的数据插入另一个mysql数据库表中。我在下面发布我的代码..

public class camelJdbc {

    public static void main(String[] args) throws Exception {
        final String url = "jdbc:mysql://localhost:3306/emp";
        final String url1 = "jdbc:mysql://localhost:3306/emp1";
        DataSource dataSource = setupDataSource(url);
        DataSource dataSource1 = setupDataSource1(url1);

        SimpleRegistry reg = new SimpleRegistry() ;
        reg.put("myDataSource",dataSource);
        reg.put("myDataSource1",dataSource1);

        CamelContext context = new DefaultCamelContext(reg);
        context.addRoutes(new camelJdbc().new MyRouteBuilder());

        context.start();
        Thread.sleep(5000);
        context.stop();
    }

    class MyRouteBuilder extends RouteBuilder {
        public void configure() {
            from("timer://Timer?period=60000")
            .setBody(constant("select * from employee"))
            .to("jdbc:myDataSource")
            .split(body())
            .choice()
            .when(body().convertToString().contains("roll=10"))
            .setBody(constant(///////What SQL command should I write here????/////))
            .to("jdbc:myDataSource1")
            .otherwise()
            .to("stream:out");
        }
    }

    private static DataSource setupDataSource(String connectURI) {
        BasicDataSource ds = new BasicDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUsername("root");
        ds.setPassword("");
        ds.setUrl(connectURI);
        return ds;
    }

    private static DataSource setupDataSource1(String connectURI1) {
        BasicDataSource ds1 = new BasicDataSource();
        ds1.setDriverClassName("com.mysql.jdbc.Driver");
        ds1.setUsername("root");
        ds1.setPassword("");
        ds1.setUrl(connectURI1);
        return ds1;
    }
}

伙计们,我不确定我应该在“to”端点中给出什么 SQL 命令。此外,我自己编写了这段代码,因为我在互联网上没有得到太多的材料,所以我什至不确定它是否是远程正确的,或者我完全偏离了轨道。请帮我弄清楚。谢谢

【问题讨论】:

    标签: java mysql apache-camel


    【解决方案1】:

    camel-jdbc 组件需要 SQL 文本,因此主体应包含插入语句...

    因此,您需要从返回 ArrayList<HashMap<String, Object>>...的 select stmt 中解析结果... split() 将您带到HashMap<String, Object>,因此您可以使用camel-simple 提取这些映射值...

    这样的……

    .setBody(simple("insert into employee values('${body[id]','${body[name]}')"))
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2023-04-04
    相关资源
    最近更新 更多