首页 文章

Spring XD jdbc(源码) - > jdbc(sink)

提问于
浏览
1

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

  • 3

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

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

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

  • 1

    就像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

相关问题