在将sql结果编组到csv时缺少标头

时间:2015-04-28 09:26:13

标签: spring apache-camel

我在骆驼中找到了这条路线:

    <route id="route-sql">
        <from uri="file://data/sqlin?delay=1000&amp;include=.*\.sql$&amp;charset=utf-8" />

        <to uri="jdbc:datasourcePdm" />
        <marshal>
            <csv delimiter="&#x9;"  quoteDisabled="true" ></csv>
        </marshal>
        <to uri="file://data/sqlout"/>
    </route>

它工作正常,数据以csv格式写入,但第一行没有标题。此外,&#39;引用行为&#39;有点奇怪 - 并非所有数据单元都被引用。我尝试了http://camel.apache.org/csv.html所示的一些选项,但没有运气。

我正在使用artifactId&#39; camel-csv&#39;在我的pom.xml中使用版本2.15.1。

我的问题:
1.如何将标题行添加到csv文件中 2.如何引用所有数据单元

1 个答案:

答案 0 :(得分:0)

使用CsvDataFormat并设置标题http://camel.apache.org/csv.html

@Test
public void test() throws Exception {
    context.addRoutes(new RouteBuilder() {

        @Override
        public void configure() throws Exception {
            from("direct:start")
                .log("${body}")
                .marshal(new org.apache.camel.dataformat.csv.CsvDataFormat().setHeader(new String[]{"foo", "bar"}))
                .log("${body}")
                ;
        }
    });

    template.sendBody("direct:start", new LinkedHashMap<String, Object>(){{
        put("foo", "abc");
        put("bar", 123);
    }});
    Thread.sleep(2000);
}

没有尝试过以下但是它应该可以工作我猜

<bean id="myCsv" class="org.apache.camel.model.dataformat.CsvDataFormat">
  <property name="delimeter" value="&#x9;"/>
  <property name="quoteDisabled" value="true"/>
  <property name="headers">
    <list>
      <value>a</value>
      <value>b</value>
    </list>
  </property>
</bean>

<route id="route-sql">
  <from uri="file://data/sqlin?delay=1000&amp;include=.*\.sql$&amp;charset=utf-8"/>

  <to uri="jdbc:datasourcePdm"/>
  <marshal ref="myCsv"/>
  <to uri="file://data/sqlout"/>
</route>