Spring XD jdbc(source) - > JDBC(汇)

时间:2014-11-05 04:11:48

标签: jdbc spring-xd

我正在尝试配置如下的流(直接从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“--deloy

但发生ClassCastException。

  

引起:java.lang.ClassCastException:org.springframework.util.LinkedCaseInsensitiveMap无法强制转换为java.lang.String       在org.springframework.xd.jdbc.JdbcMessagePayloadTransformer.transformPayload(JdbcMessagePayloadTransformer.java:39)       在org.springframework.integration.transformer.AbstractPayloadTransformer.doTransform(AbstractPayloadTransformer.java:33)       在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,来自下方的拉链。

  

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 个答案:

答案 0 :(得分:3)

就像Gary说的那样,接收器需要一个JSON文档(有一个优秀的JIRA票证来改善接收器以接受Map)。现在,您可以使用--outputType = application / json让源生成JSON文档而不是Map。这是我刚试过的一个例子:

stream create jdbcCp --definition "source:jdbc --query='select id,name,year from myfiles where status = 0' --maxRowsPerPoll=10 --update='update myfiles set status = 1 where id in (:id)' --outputType=application/json | sink:jdbc --tableName=newfiles --columns=id,name,year"  --deploy

JIRA问题是https://jira.spring.io/browse/XD-2250

答案 1 :(得分:1)

请参阅the documentation - 接收器需要一个简单的String有效负载或一个将转换为Map的JSON字符串。当List为真时,源会生成Map Map个s(或单个split)。

目前,接收器没有直接处理Map的选项;您可以添加transform模块以将Map转换为JSON或创建自定义接收器。

我们应该更改接收器以接受Map