简体   繁体   English

Spring XD jdbc(源)-> jdbc(接收器)

[英]Spring XD jdbc(source) -> jdbc(sink)

I'm trying to configure streams like below (directly pipe from jdbc source to jdbc sink) 我正在尝试配置如下所示的流(直接从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,name 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 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 ='从测试中选择ID,名称'|输入:jdbc --username = test --password = test --driverClassName = com.mysql.jdbc.Driver --tableName = test2 --columns = id ,name --url = jdbc:mysql:// dbhost:3306 / test“ --deploy

but occurs ClassCastException. 但发生ClassCastException。

Caused by: java.lang.ClassCastException: org.springframework.util.LinkedCaseInsensitiveMap cannot be cast to java.lang.String at org.springframework.xd.jdbc.JdbcMessagePayloadTransformer.transformPayload(JdbcMessagePayloadTransformer.java:39) at org.springframework.integration.transformer.AbstractPayloadTransformer.doTransform(AbstractPayloadTransformer.java:33) at org.springframework.integration.transformer.AbstractTransformer.transform(AbstractTransformer.java:33) ... 147 more 由以下原因引起的:java.lang.ClassCastException:org.springframework.xd.jdbc.JdbcMessagePayloadTransformer.transformPayload(JdbcMessagePayloadTransformer.java:39)上的org.springframework.util.LinkedCaseInsensitiveMap无法转换为java.lang.String org.springframework.integration.transformer.AbstractTransformer.transform(AbstractTransformer.java:33)的.transformer.AbstractPayloadTransformer.doTransform(AbstractPayloadTransformer.java:33)... 147更多

MySQL connection and table schema seems properly configured. MySQL连接和表架构似乎已正确配置。 connectivity already confirmed. 连接已确认。

CREATE TABLE test (id int, name varchar(20)); 创建表测试(id int,名称varchar(20)); CREATE TABLE test2 (id int, name varchar(20)) 创建表test2(id int,名称varchar(20))

Spring XD version is 1.1.0.BUILD-20141103.163150-1-dist from zip below. 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 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

I want to store the payload data to target sink table, but is the functionality still experimental? 我想将有效载荷数据存储到目标接收器表,但是功能是否还在试验中?
or, Is it the stream problem, for example just racks some kind of conversion? 还是流问题,例如只是进行某种转换?

Like Gary said, the sink expects a JSON document (there is an outstanding JIRA ticket to improve the sink to also accept a Map). 如Gary所说,接收器需要一个JSON文档(有一个出色的JIRA票证可以改善接收器以接受地图)。 For now you can have the source produce a JSON document instead of a Map using --outputType=application/json. 现在,您可以使用--outputType = application / json使源代码生成JSON文档而不是Map。 Here is an example I just tried: 这是我刚刚尝试的示例:

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

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

See the documentation - the sink expects a simple String payload or a JSON String that will be converted to a Map . 请参阅文档 -接收器需要一个简单的String有效负载或一个JSON String,它将被转换为Map The source produces a List of Map s (or individual Map s when split is true). 源生成MapList (或在split为true时生成单个Map )。

Currently there is no option for the sink to handle a Map directly; 当前,接收器无法直接处理Map。 you could add a transform module to convert the Map to JSON or create a custom sink. 您可以添加transform模块以将Map转换为JSON或创建自定义接收器。

We should probably change the sink to accept a Map . 我们可能应该更改接收器以接受Map

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM