1

我正在使用 Mysql 作为消息存储数据库,刚刚尝试升级到 Spring Integration 5.5.5,但发现架构发生了变化,CONDITIONINT_MESSAGE_GROUP 表中需要一列,虽然我可以通过添加反引号来创建表CONDITION,但有一个 sql在 JdbcMessageStore.java 中

    GET_GROUP_INFO("SELECT COMPLETE, LAST_RELEASED_SEQUENCE, CREATED_DATE, UPDATED_DATE, CONDITION" +
            " from %PREFIX%MESSAGE_GROUP where GROUP_KEY=? and REGION=?")

它不能工作吗?任何解决方法?

4

1 回答 1

0

是的,我现在明白了。看起来condition是 MySQL 中的保留字:条件是否在 mySQL 中被视为特殊字?. 不知道我是怎么错过的,但这被认为是一个错误,必须从框架的角度真正修复。

解决方法取决于您正在做什么JdbcMessageStore。如果您从队列通道中使用它,那么最好查看一个JdbcChannelMessageStorehttps ://docs.spring.io/spring-integration/docs/current/reference/html/jdbc.html#jdbc-message-store -渠道

如果您真的处理聚合器,那么您必须扩展JdbcMessageStore和覆盖getGroupMetadata()以及setGroupCondition()aCONDITION用于 SQL 语句的位置。

或者只是看看其他一些不保留CONDITION字的数据库供应商!

我将通过GROUP_CONDITIONword来修复它......

更新

框架代码的修复在这里:https ://github.com/spring-projects/spring-integration/pull/3687 。下一个 Spring Integration5.5.7将像这样发布:https ://github.com/spring-projects/spring-integration/milestone/80 。正好赶上下一个 Spring Boot 版本!

于 2021-12-09T14:56:25.973 回答