2016-08-28 1 views
0

이 예제는 백 엔드 오라클에서 일부 행을 가져 오기 위해 시도했다.이 예제는 camel-sql이다.캔트는 SQL 출력을 Apache Camel의 파일에 저장한다.

데이터 소스 정의 :

<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) 에서

.. JdbcTemplate.queryForList() 메소드에 의해 리턴한다. 선택 조작은

답변

2

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

16 이상의 결과는, List<Map<String, Object>> 타입의 인스턴스이다.

쿼리 결과로 List<Map<String, Object>>이 수신되었습니다. 이 결과를 파일에 저장하려면 레코드별로 목록을 분할하고 (스플리터 사용) 한 레코드를 문자열로 변환해야합니다 (일종의 템플릿을 사용할 수도 있고 문자열 필드 값에 조인 할 수도 있음) 이 문자열을 파일로 저장하십시오.

+0

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

그리고, 더 일반적으로, 초보자에 대한 조언은 다음과 같습니다, 당신은 메시지 본문의 데이터 타입을 알아야하기 전에 당신의 경로에서 각 단계 후. 따라서 : 단계 전에 데이터 유형을 알아야합니다 (그렇지 않은 경우 확인). 그러면 해당 단계에서 해당 유형의 본문을 처리 할 수 ​​있는지 여부를 묻는 메시지를 표시 할 수 있습니다. 또한 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 파일은 다음과 종속성을 추가해야한다.

관련 문제