spring 集成 5.5.x 如何使用 mysql 作为消息存储

how can spring integration 5.5.x use mysql as message store

我正在使用 Mysql 作为消息存储数据库,刚刚尝试升级到 spring 集成 5.5.5,但发现架构已更改, 在 INT_MESSAGE_GROUP table 中需要一个 CONDITION 列,尽管我可以通过在 CONDITION 周围添加反引号来创建 table,但在 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=?")

不能用? 任何解决方法?

是的,我现在明白了。看起来 condition 是 MySQL 中的保留字:Is condition considered a special word in mySQL?。不知道我是怎么错过的,但这被认为是一个错误,必须从框架的角度真正修复。

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

如果你真的与聚合器打交道,那么你必须扩展 JdbcMessageStore 并覆盖 getGroupMetadata()setGroupCondition(),其中 CONDITION 用于 [=41] =] 语句。

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

我将通过 GROUP_CONDITION 字来修复它...

更新

框架代码的修复在这里:https://github.com/spring-projects/spring-integration/pull/3687. The next Spring Integration 5.5.7 will be released like this: https://github.com/spring-projects/spring-integration/milestone/80。正好赶上下一个 Spring 引导版本!