spring使用块对数据库进行批读写,使用taskexecutor进行多线程读写

nkoocmlb  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(437)

我的代码可以读取和写入数据库,但只有一块之后,这个过程停止。无法执行其他块。
下面是类似org.springframework.dao.invaliddataaccessresourceusageexception的错误:意外的光标位置更改。
分步实施

  1. @Bean
  2. public Step step(StepBuilderFactory stepBuilderFactory) throws Exception {
  3. ThreadPoolTaskExceutor taskExcutorInstance = new ThreadPoolTaskExceutor();
  4. taskExcutorInstance.setCorePoolSize(10);
  5. taskExcutorInstance.setMaxPoolSize(10);
  6. return stepBuilderFactory
  7. .get("read from DB and Write to DB")
  8. .<Object, Object>chunk(1000)
  9. .reader(reader(null))
  10. .writer(writer())
  11. .taskExecutor(taskExcutorInstance)
  12. .build();
  13. }

对于使用jdbccursoritemreader的reader im和使用jdbccbatchitemwriter的writer im。我试着同时读写多首歌
如果我需要禁用verifycursorposition,我们到底需要如何禁用它?

dzhpxtsq

dzhpxtsq1#

这个 JdbcCursorItemReader 延伸 AbstractItemCountingItemStreamItemReader 这不是线程安全的。您可以尝试同步其 read 操作(通过用 SynchronizedItemStreamReader ),否则您需要使用像 JdbcPagingItemReader .

相关问题