CamelJdbcColumnNames header 未命中
CamelJdbcColumnNames header missed
我尝试使用 camel 的 jdbc 组件。我在这里找到了文档:http://camel.apache.org/jdbc.html.
它工作得很好,因为结果可以从数据库中获得,但是在文档中提到的名为 CamelJdbcColumnNames
的排队答案中没有 header。
我只能看到 CamelJdbcRowCount
.我的 camel 版本是 2.15.1。
我必须打开开关才能启用它吗?
这是我的 spring-config.xml:
的摘录
<bean id="ds" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@myhost:1521:mydbsid"/>
<property name="username" value="myuser"/>
<property name="password" value="mypass"/>
</bean>
<route id="route db">
<from uri="file://data/inbox" />
<to uri="jdbc:ds" />
<to uri="jms:sqlret" />
</route>
编辑:
为了排除 jms,我添加了一个 Processor
。有了这个,我想调试消息 header。这是我的 spring-config.xml:
的新摘录
<bean id="jdbccheck" class="mypackage.JdbcCheck"></bean>
<route id="route db">
<from uri="file://data/inbox" />
<to uri="jdbc:ds" />
<process ref="jdbccheck"/>
<to uri="jms:sqlret" />
</route>
处理器代码:
public class JdbcCheck implements Processor {
private static final Logger LOG = Logger.getLogger(JdbcCheck.class.getName());
@Override
public void process(Exchange exchange) throws Exception {
LOG.info(exchange.getIn().getHeaders().toString());
}
}
日志信息:
{breadcrumbId=ID-chris-HP-50597-1429955241877-0-1, CamelFileAbsolute=false, CamelFileAbsolutePath=C:\daten\chris\source\netbeans\GbLuna\data\inbox2\in.sql, CamelFileContentType=null, CamelFileLastModified=1429953640254, CamelFileLength=36, CamelFileName=in.sql, CamelFileNameConsumed=in.sql, CamelFileNameOnly=in.sql, CamelFileParent=data\inbox2, CamelFilePath=data\inbox2\in.sql, CamelFileRelativePath=in.sql, CamelJdbcRowCount=837}
最后的 var-/value 对是 CamelJdbcRowCount=837
,在我看来它以某种方式起作用。但为了进一步处理,我想处理列名。那么:如何得到CamelJdbcColumnNames
?
好的,现在知道了,这是因为您将数据发送到 JMS 端点。而 JMS 规范只支持 JMS 的一些数据类型headers/properties。这通常是字符串、数字和原始类型。
您可以在 Camel JMS 文档页面和 JMS spec/javadoc.
中阅读更多相关信息
列名称 header 存储为 Java collection 类型的 header,JMS 不支持。
如果启用 Camel 跟踪器,您应该能够在消息路由到 JMS 端点之前看到 header:http://camel.apache.org/tracer
我尝试使用 camel 的 jdbc 组件。我在这里找到了文档:http://camel.apache.org/jdbc.html.
它工作得很好,因为结果可以从数据库中获得,但是在文档中提到的名为 CamelJdbcColumnNames
的排队答案中没有 header。
我只能看到 CamelJdbcRowCount
.我的 camel 版本是 2.15.1。
我必须打开开关才能启用它吗?
这是我的 spring-config.xml:
的摘录<bean id="ds" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@myhost:1521:mydbsid"/>
<property name="username" value="myuser"/>
<property name="password" value="mypass"/>
</bean>
<route id="route db">
<from uri="file://data/inbox" />
<to uri="jdbc:ds" />
<to uri="jms:sqlret" />
</route>
编辑:
为了排除 jms,我添加了一个 Processor
。有了这个,我想调试消息 header。这是我的 spring-config.xml:
<bean id="jdbccheck" class="mypackage.JdbcCheck"></bean>
<route id="route db">
<from uri="file://data/inbox" />
<to uri="jdbc:ds" />
<process ref="jdbccheck"/>
<to uri="jms:sqlret" />
</route>
处理器代码:
public class JdbcCheck implements Processor {
private static final Logger LOG = Logger.getLogger(JdbcCheck.class.getName());
@Override
public void process(Exchange exchange) throws Exception {
LOG.info(exchange.getIn().getHeaders().toString());
}
}
日志信息:
{breadcrumbId=ID-chris-HP-50597-1429955241877-0-1, CamelFileAbsolute=false, CamelFileAbsolutePath=C:\daten\chris\source\netbeans\GbLuna\data\inbox2\in.sql, CamelFileContentType=null, CamelFileLastModified=1429953640254, CamelFileLength=36, CamelFileName=in.sql, CamelFileNameConsumed=in.sql, CamelFileNameOnly=in.sql, CamelFileParent=data\inbox2, CamelFilePath=data\inbox2\in.sql, CamelFileRelativePath=in.sql, CamelJdbcRowCount=837}
最后的 var-/value 对是 CamelJdbcRowCount=837
,在我看来它以某种方式起作用。但为了进一步处理,我想处理列名。那么:如何得到CamelJdbcColumnNames
?
好的,现在知道了,这是因为您将数据发送到 JMS 端点。而 JMS 规范只支持 JMS 的一些数据类型headers/properties。这通常是字符串、数字和原始类型。
您可以在 Camel JMS 文档页面和 JMS spec/javadoc.
中阅读更多相关信息列名称 header 存储为 Java collection 类型的 header,JMS 不支持。
如果启用 Camel 跟踪器,您应该能够在消息路由到 JMS 端点之前看到 header:http://camel.apache.org/tracer