Apache Camel在Java DSL中使用数据库查询

时间:2015-06-11 14:22:55

标签: java dsl

我目前正在尝试使用Apache Camel将一些数据从Oracle导入ElasticSearch(采用JSON格式)。我在这个框架上是全新的,所以我想你可以帮忙吧!

问题是我的routeBuilder从我的表Entreprise .setBody(constant("select * from entreprise")).to("jdbc:myDataSource")获取数据,我得到类似的东西:{id = 1231,test = hello},所以我把它放在一个自定义处理器中添加引号。我认为修改一个String是非常难看的,因为整数,布尔值,数组不应该在引号之间,所以我宁愿使用像HashMap这样的对象。

我已经尝试过使用Spring创建路由的apache-sql示例:

<route id="processOrder-route">
  <from uri="sql:{{sql.selectOrder}}?consumer.onConsume={{sql.markOrder}}"/>
  <to uri="bean:orderBean?method=processOrder"/>
  <log message="${body}"/>
</route>

最后将信息输入HashMap:

 public String processOrder(Map<String, Object> data) {
    return "Processed order id " + data.get("id") + " item " + data.get("item") + " of " + data.get("amount") + " copies of " + data.get("description");
}

所以我的主要问题是: Java DSL中这条路线的等价物是什么,它可以返回HashMap或类似的东西?

这是我的代码:

public class MainApp {
  public static void main(String[] args) throws Exception {

    String url = "jdbc:oracle:thin:alexis/alexis@localhost:1521:xe";
    System.out.println("Setting up data source.");
    DataSource dataSource = setupDataSource(url);
    System.out.println("Done.");

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

    CamelContext context = new DefaultCamelContext(reg);
    ProducerTemplate template = context.createProducerTemplate();
    context.addRoutes(new MainApp().new MyRouteBuilder());
    context.start();
    Thread.sleep(3000); 
    context.stop();
  }

  class MyRouteBuilder extends RouteBuilder {

    public void configure() {
        Processor proc = new ConvertToJSON();
        String dst = "C:/Users/**/Desktop/Workspace_sts/democamelJava/data";
        from("timer://foo?period=2s")
        .setBody(constant("select * from entreprise"))
        .to("jdbc:myDataSource").split(body()).process(proc)
        .convertBodyTo(String.class)
        .to("file://" + dst);
        //.to("elasticsearch://localhost:9200?operation=INDEX&indexName=twitter&indexType=tweet");
    }
}

谢谢你的每一个答案!

0 个答案:

没有答案