0

我的 xml 在下面给出

 <camelContext trace="false" xmlns="http://camel.apache.org/schema/spring">

    <propertyPlaceholder id="placeholder" location="classpath:application.properties" />

    <!--Route:1 for POLLUX Data Processing   -->

 <route id="processPolluxData-Route" startupOrder="1">
<from uri="{{POLLUX_INPUT_PATH}}?noop=true"/>
  <unmarshal ref="csvBindyDataformatForPolluxData"/>
  <camel:bean ref="polluxDataController" method="processPolluxData"/>
  <camel:log message="Line:${body}" loggingLevel="INFO"/> 
<to uri="sqlComponent:{{sql.insertPolluxData}}?batch=true"  /> 
</route> 

     <!-- Route:2 for RSI Data Processing -->

<route id="processRsiData-Route" startupOrder="2">
<from uri="{{RSI_INPUT_PATH}}?noop=true"/>
  <unmarshal ref="csvBindyDataformatForRsiData"/>
  <camel:bean ref="rsiDataController" method="processRsiData"/>
  <camel:log message="Line:${body}" loggingLevel="INFO"/> 
<to uri="sqlComponent:{{sql.insertRsiData}}?batch=true" /> 
</route>

    <!-- Route for Global Data Processing  -->
    <route id="processGlobalData-Route"  >
    <from uri="sqlComponent:{{sql.selectOrder}}?consumer.useIterator=false" />
         <camel:bean ref="globalDataController" method="processGlobalData" />  
        <marshal>
            <csv delimiter=","/>
        </marshal>
        <log message="${body}" />
    <setHeader headerName="camelFilename">
        <constant>result.csv</constant>
    </setHeader>
    <to uri="{{GLOBAL_OUTPUT_PATH}}?fileExist=Append" />
</route>

我的sql语句是

sql.selectOrder=select STID,CLLTR,SOURCE from GSI_DEVL.POLLUX_DATA

用于处理结果集的 bean 类是

public class GlobalDataController {

List<Map<String, Object>> globalStationProccessedList = new ArrayList<Map<String, Object>>();
List<Map<String, Object>> globalStationMap = new ArrayList<Map<String, Object>>();

@SuppressWarnings("unchecked")
public List<Map<String, Object>> processGlobalData(Exchange exchange) throws Exception {

    // System.out.println("Processing " + exchange.getIn().getBody());

    globalStationMap = (List<Map<String, Object>>) exchange.getIn().getBody();
    globalStationProccessedList.addAll(globalStationMap);

    return globalStationProccessedList;
}

}

现在的问题是 Route 1 数据被传输到 csv 文件中,数据库中有确切的行数。但是 route 2 中没有数据附加到我使用 camel 2.16 的 csv 文件中

4

2 回答 2

0

您是否尝试在 sql 组件上设置此参数?

consumer.useIterator boolean true Camel 2.11:仅限 SQL 消费者:如果为 true,则轮询时返回的每一行都将单独处理。如果为 false,则将整个 java.util.List 数据设置为 IN 主体。

尝试将此设置为 false。这样,您应该将整个 sql 结果集放入一个列表中,然后将整个列表写入一个文件。

于 2016-01-14T09:02:33.687 回答
0

如果问题仅在大量文件中(不是文件格式),那么这里是解决方案:

  <route id="processOrder-route">
    <from uri="sqlComponent:{{sql.selectOrder}}"/>
    <camel:bean ref="controllerformarshalling" method="processGlobalData"  />
    <marshal >
    <csv delimiter="," useMaps="true" > </csv>
     </marshal>
    <log message="${body}"/>
    <setHeader headerName="CamelFileName">
        <constant>result.csv</constant>
    </setHeader>  
    <to uri="file://D://cameltest//output&amp;fileExist=Append" />
  </route>

对于下一个池,您可能可以根据当前时间设置另一个文件名。

于 2016-01-13T14:43:03.070 回答