0

我有以下数据结构

{
 metadata: {
     eventId:string
     eventName: string
     ts: date time string
    . . .
},
 data:{
   // complex event payload
 }
}

我从消息总线获取这些事件,需要将消息写入具有以下列的关系表中

事件ID | 事件名称 | ts(日期对象) | 有效载荷(clob)

如何在 Spring XD 中实现这些目标?

  1. 将非顶层元素保存到多列中
  2. 将 metadata.ts 转换为 DBMS 的日期对象

我在想这样的事情。

jms|jdbc --columns=payload.metadata.eventId,payload.metadata.eventName,someMagicFunction(payload.metadata.ts),payload

但是,它在 HSQLDB 中引发了一些错误。

2016-09-28T07:06:41-0700 WARN JMS Session Delivery Thread - $TMPAPPID$112880967$$SESSION$0:4720332838885165348 listener.SimpleMessageListenerContainer - Execution of JMS message listener failed, and no ErrorHandler has been set.
org.springframework.messaging.MessageHandlingException: error occurred in message handler [org.springframework.integration.jdbc.JdbcMessageHandler#0]; nested ex
ception is org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [insert into ces_test5 (payload.metadata.eventId, payload
.metadata.eventName, payload
.metadata.ts,  payload) values(?, ?, ?)]; nested exception is java.sql.SQLSyntaxErrorException: too many identifier parts: PAYLOAD
        at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:139) ~[spring-integration-core-4.2.5.RELEASE
.jar:na]
        at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116) ~[spring-integration-core-4.2.5.RELEA
SE.jar:na]
        at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:147) ~[spring-integration-core-4.2.5.RELEASE.jar
:na]
        at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:120) ~[spring-integration-core-4.2.5.RELEASE.jar:n
a]
        at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:77) ~[spring-integration-core-4.2.5.RELEA
SE.jar:na]
        at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:442) ~[spring-integration-core-4.2.5.RELEASE.jar:na]
        at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:392) ~[spring-integration-core-4.2.5.RELEASE.jar:na]
        at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:115) ~[spring-messaging-4.2.4.RELEASE.jar:4.2.4.RELE
ASE]
        at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:45) ~[spring-messaging-4.2.4.RELEASE.jar:4.2.4.RELEA

#1(将非顶级元素保存到多列中)甚至可能吗?

4

1 回答 1

0

当您在此处引用列名时未明确指定有效负载时会发生什么:

jms|jdbc --columns=metadata.eventId,metadata.eventName,someMagicFunction(metadata.ts),payload

JDBC 接收器对payload数据进行操作,因此您不必指定它。

于 2016-10-05T06:10:30.427 回答