我正在尝试配置如下的流(直接从jdbc源管道到jdbc接收器)
xd> stream create test2 --definition“output:jdbc --split = true --username = test --password = test --driverClassName = com.mysql.jdbc.Driver --url = jdbc:mysql:// dbhost :3306 / test --query ='select id,test from test'| input:jdbc --username = test --password = test --driverClassName = com.mysql.jdbc.Driver --tableName = test2 --columns = id,name --url = jdbc:mysql:// dbhost:3306 / test“--deploy
但是发生了ClassCastException .
引起:java.lang.ClassCastException:org.springframework.util.LinkedCaseInsensitiveMap无法在org.springframework的org.springframework.xd.jdbc.JdbcMessagePayloadTransformer.transformPayload(JdbcMessagePayloadTransformer.java:39)中强制转换为java.lang.String . integration.transformer.AbstractPayloadTransformer.doTransform(AbstractPayloadTransformer.java:33)at org.springframework.integration.transformer.AbstractTransformer.transform(AbstractTransformer.java:33)... 147更多
MySQL连接和表模式似乎已正确配置 . 连接已经确认 .
CREATE TABLE test(id int,name varchar(20)); CREATE TABLE test2(id int,name varchar(20))
Spring XD版本为1.1.0.BUILD-20141103.163150-1-dist,下方为zip .
http://repo.spring.io/libs-snapshot/org/springframework/xd/spring-xd/1.1.0.BUILD-SNAPSHOT/spring-xd-1.1.0.BUILD-20141103.163150-1-dist.zip
我想将有效负载数据存储到目标接收器表,但功能仍然是实验性的吗?
或者,它是流问题,例如只是进行某种转换吗?
2 回答
请参阅the documentation - 接收器需要一个简单的String有效负载或一个将转换为
Map
的JSON字符串 . 当split
为真时,源生成List
Map
(或单个Map
s) .目前,接收器没有直接处理Map的选项;您可以添加
transform
模块以将Map
转换为JSON或创建自定义接收器 .我们应该更改接收器以接受
Map
.就像Gary说的那样,接收器需要一个JSON文档(有一个杰出的JIRA票证来改善接收器以接受Map) . 现在,您可以使用--outputType = application / json让源生成JSON文档而不是Map . 这是我刚试过的一个例子:
JIRA问题是https://jira.spring.io/browse/XD-2250