我命中数据库后得到10名员工;在每位员工的基础上,我访问了另一个数据库并获取了一些信息并将其连接起来。
根据我的理解,可以在.process()或.enrich()中完成(使用聚合器)
.to("jdbc:masterdata?outputClass=com.diavry.integrator.Employee")
.to("log:?level=INFO&showBody=true")
.process(e -> {
List<Employee> eiEmployees = (List<Employee>) e.getIn().getBody(List.class);
for (Employee employee : eiEmployees) {
PreparedStatement statement = otherDbConnection.prepareStatement(sql);
statement.setString(1, employee.getUserid());
statement.setString(2, employee.getCompanyid());
resultSet = statement.executeQuery();
if (resultSet.next()) {
legalUnitName = resultSet.getString(1);
}
employee.setOrgstr_unitname(legalUnitName);
}
})
现在我可以在Aggregator中做同样的事情,在其中我可以用上述代码丰富原始内容并返回。
关于上述用例,我没有区别吗?
嗯,主要区别在于您在Processor
中编写了JDBC代码(1)。另一个区别是您可以自己为每个员工管理迭代以获取详细数据。这也意味着您需要自己进行任何错误处理(如果在迭代过程中中止处理如何恢复)。
解决此用例的骆驼方法是:
这是骆驼的主要魔法! 无需编写很多“运输级”代码。只需编写一行Camel DSL即可查询数据库,增强JMS使用者和您可以想到的任何其他集成技术。
当然还有所有常见的集成问题EIPs is implements。
(1)旁注:我建议放弃低级接口Processor
,而改为simple Java Beans。