我目前正在尝试使用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");
}
}
谢谢你的每一个答案!