I'm using Mysql as message store DB, just tried to upgrade to spring integration 5.5.5, but found the schema changed,
there requires a CONDITION
column in INT_MESSAGE_GROUP table, although I can create the table by adding backtick around CONDITION
, there is a sql in JdbcMessageStore.java
GET_GROUP_INFO("SELECT COMPLETE, LAST_RELEASED_SEQUENCE, CREATED_DATE, UPDATED_DATE, CONDITION" +
" from %PREFIX%MESSAGE_GROUP where GROUP_KEY=? and REGION=?")
it cannot work? any work-around?
Yes, I see now. Looks like
condition
is a reserved word in MySQL: Is condition considered a special word in mySQL?. Not sure how I have missed that, but this is considered as a bug and have to be really fixed from the framework perspective.The workaround depend on the fact what you are doing with that
JdbcMessageStore
. If you use it from the queue channel, then it is better to look into aJdbcChannelMessageStore
instead: https://docs.spring.io/spring-integration/docs/current/reference/html/jdbc.html#jdbc-message-store-channels.If you really deal with an aggregator, then you have to extend
JdbcMessageStore
and overridegetGroupMetadata()
andsetGroupCondition()
where aCONDITION
is in use for SQL statements.Or just look into some other DB vendor which doesn't reserve
CONDITION
word!I'm going to fix it via
GROUP_CONDITION
word instead...UPDATE
The fix for the framework code is here: 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. Just in time for the next Spring Boot versions!