我们正在使用Spring Batch从一个DB同步记录到另一个。
目标表定义如下:
CREATE TABLE entity_name (
entity_id varchar(255) NOT NULL,
value varchar(255) NOT NULL,
source varchar(255) NULL,
type enum('type1', 'type2','type3') NULL,
timestamp timestamp NULL,
status varchar(50) DEFAULT 'approved',
CONSTRAINT entity_name_pkey PRIMARY KEY (entity_id, value)
);
写入器通过以下方式实例化:
String command = "insert into entity_name(entity_id, value, source, type, status, timestamp) values(:entityId, :value, :source, :type, :status, :timestamp)";
JdbcBatchItemWriter<EntityName> entityWriter = new DefaultItemWriter<EntityName>(dataSource, jdbcTemplate, command, excludedTypes).getWriter();
然而,基于JdbcBatchItemWriter调试日志,它似乎在语句中删除了timestamp
列:
08:48:16.528 [main] DEBUG org.springframework.batch.item.database.JdbcBatchItemWriter - Executing batch with 2 items.
08:48:16.529 [main] DEBUG org.springframework.jdbc.core.JdbcTemplate - Executing SQL batch update [insert into entity_name(entity_id, value, source, type, status ) values(?, ?, ?, ?, ?)]
我知道我们可能不应该使用保留字作为列名,但它是什么,我想知道这是否是JdbcTemplate中的预期行为,如果有任何方法可以解决这个问题。
经过更多的调试,我发现有一个测试配置,它有另一个SQL命令定义,没有时间戳列。