您好我是服务组合的新手。任何人都指向我正确的方向如何从oracle Db读取表并将该表发布到本地文件。(这里我只想使用blueprint.XML内容,我可以直接在服务混合部署文件夹中部署。)
答案 0 :(得分:0)
以下是一个例子:
public class JdbcReadFromOracleRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
from("sql:select full_name from common.company where code='1'?delay=3000&dataSource=oracleDataSource&outputType=SelectOne")
.routeId("testOracleRead").autoStartup(true)
.log(LoggingLevel.INFO, "JDBC oracle : ${body}");
.to("file://c:/test/test.txt")
}
}
您可以使用pax-jdbc(https://ops4j1.jira.com/wiki/spaces/PAXJDBC/overview)来创建数据源(https://ops4j1.jira.com/wiki/display/PAXJDBC/Oracle+driver+adapter)。
获得表格记录后,您可以使用模板引擎创建文件内容(例如 velocity (http://camel.apache.org/velocity.html))或其他方式,然后通过组件档案(http://camel.apache.org/file2.html)。
答案 1 :(得分:0)
一种简单的方法是使用Camel's SQL Component。
<route id="foo">
<from uri="sql:select * from foo"/>
</route>
返回的数据将是Exchange正文中的地图列表,您可以在数据库选择后使用Camel's Splitter EIP轻松迭代,作为下一步:
<split>
<simple>${body}</simple>
</split>
您可以通过多种方式在<split>
内构建文件。可以使用simple
和${body[FIELD_NAME_HERE]}
但是请记住,每次拆分迭代都是新的交换,因此您无法在交换中的任何内容中汇总文件内容,例如标题或属性。相反,我可能会使用带有拆分的聚合策略,称为Composed Message Processor。这样,您可以在旧交换体中逐行构建您想要的任何格式的文件。然后在</split>
结束后,只需使用Camel's File component将交换正文保存到文件中。
另一种选择是在SQL语句之后执行处理器,并且如果您更喜欢这样做,Java代码可以使用交换体中的List of Maps来迭代并构建文件。 Camel的分离器也有开销,所以如果性能是一个问题并且你正在处理成千上万的记录,这可能是最好的选择。