伙计我正在使用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命令。此外,我自己编写了这段代码,因为我没有在互联网上获得太多的物资,所以我甚至不确定它是否远程正确或者我完全没有轨道。请帮我搞清楚。感谢
答案 0 :(得分:2)
camel-jdb c组件需要SQL文本,因此正文应包含插入语句...
所以,你需要解析select stmt中返回ArrayList<HashMap<String, Object>>
的结果... split()会将你带到HashMap<String, Object>
,这样你就可以使用{{3}提取这些地图值了} ...
.setBody(simple("insert into employee values('${body[id]','${body[name]}')"))