Spring集成jdbc数组更新查询拼写表达式

Spring integration jdbc array update query spel expression

我正在尝试为我的 JdbcPollingChannelAdapter 创建一个 'update-query',工作流程如下:

  1. Select 来自数据库的 500 条类型 A 记录
  2. 用最后读取的记录(位置 500 处的)的值更新另一个 table 中的 1 行

但我无法解决这个问题,因为我一直在尝试使用 spring-el 来查找值。

通过调试,我达到了JdbcPollingChannelAdapterexecuteUpdateQuery方法,

void executeUpdateQuery(Object obj) {
        SqlParameterSource updateParameterSource = this.sqlParameterSourceFactory.createParameterSource(obj);
        this.jdbcOperations.update(this.updateSql, updateParameterSource);
    }

其中 Object obj 是一个包含 500 条 A 类型记录的 ArrayList

这是我的最佳搭配:

UPDATE LAST_EVENT_READ SET SEQUENCE=:#root[499].sequence, EVENT_DATE=:#[499].eventDate

谁能帮帮我?

P.S。类型 A 具有序列和事件日期属性

我建议您使用自定义 SqlParameterSourceFactory 并且已经不依赖 SpEL:

public class CustomSqlParameterSourceFactory implements SqlParameterSourceFactory {

    @Override
    public SqlParameterSource createParameterSource(Object input) {
        List<?> objects = (List<?>) input;
        return new BeanPropertySqlParameterSource(objects.get(objects.size() - 1));
    }

}

将其注入 JdbcPollingChannelAdapter.setUpdateSqlParameterSourceFactory() 并已在 UPDATE 语句中使用简单属性:

UPDATE LAST_EVENT_READ SET SEQUENCE=:sequence, EVENT_DATE=:eventDate