2016-08-28 20 views
0

この例では、camel-sqlという例をバックエンドのOracleからいくつかの行をフェッチしようとしています。CantはApache CamelのファイルにSQL出力を保存します

データソースの定義:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> 
    <property name="url" value="jdbc:oracle:thin:@localhost:port:sid"/> 
    <property name="username" value="username"/> 
    <property name="password" value="password"/> 
</bean> 

ルート定義:

<route id="QueryTable"> 
    <from uri="timer:foo?period=5s"/> 
    <to uri="sql:{{sql.selectOrder}}"/> 
    <to uri="file:target/data/?fileName=data.txt"/> 
</route> 

適切に行をフェッチするようだが、ファイルが作成されないと、次の例外を報告します。どんな助けも高く評価されます。 org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:105) でorg.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:198) で

..選択操作のためのより。16

答えて

2

http://camel.apache.org/sql-component.html

JdbcTemplate.queryForList()メソッドによって返される結果は、List<Map<String, Object>>型のインスタンスです。

クエリの結果としてList<Map<String, Object>>が届きました。この結果をファイルに保存したい場合は、レコードでリストを分割し(スプリッタを使用)、レコードを文字列に変換したり(テンプレートの種類を使用したり、文字列フィールドの値に結合したり)この文字列をファイルに保存します。

+0

そして、より一般的に、初心者へのアドバイスは、次のようになります。あなたのルートの各ステップの前と後では、メッセージ・ボディのデータ型を知っている必要があります。だから、ステップの前にデータ型を知っていて、そうでなければチェックして、そのステップがその型のボディを扱うことができるかどうか尋ねることができます。また、ステップ9の結果のデータ型を知っていて、そうでない場合はチェックしてください)。 –

0

親切な助けをありがとう。ここでは、結果セットをファイルに保存するために使用したことがあります。

<from uri="timer:foo?repeatCount=1" /> 
 
    <to uri="sql:{{sql.selectOrder}}"/> 
 
    <marshal> 
 
    <csv delimiter="|" /> 
 
    </marshal> 
 
<to uri="file://target/test.csv?fileName=data.txt" />

そしてもちろん、のpom.xmlには、以下の依存関係が追加されていなければなりません。

<dependency> 
 
    <groupId>org.apache.camel</groupId> 
 
    <artifactId>camel-csv</artifactId> 
 
</dependency>

関連する問題