我正在使用弹簧批处理将 csv 数据保存在 mysql 表中。大约有 1000 万条记录。
我的作家看起来像下面
@Bean
@StepScope
public JdbcBatchItemWriter<DataEntity> writeDataEntity(DataSource dataSource) {
JdbcBatchItemWriter<DataEntity> writer = new JdbcBatchItemWriter<DataEntity>();
writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<DataEntity>());
writer.setSql("INSERT INTO data_entry (id, score, data, pid) "
+ "VALUES (:id, :score, :data, :pid) "
+ "ON DUPLICATE KEY UPDATE data=:data, score=:score, pid=:pid");
writer.setDataSource(dataSource);
writer.afterPropertiesSet();
return writer;
}
此代码对于较少的记录运行良好,但对于较大的记录会出现死锁。
尝试获取锁时发现死锁