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

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

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

@Bean
    public Step step(StepBuilderFactory stepBuilderFactory) throws Exception {
       ThreadPoolTaskExceutor taskExcutorInstance = new ThreadPoolTaskExceutor();
       taskExcutorInstance.setCorePoolSize(10);
       taskExcutorInstance.setMaxPoolSize(10);

       return stepBuilderFactory
                .get("read from DB and Write to DB")
                .<Object, Object>chunk(1000)
                .reader(reader(null))
                .writer(writer())
                .taskExecutor(taskExcutorInstance)
                .build();
    }

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

dzhpxtsq

dzhpxtsq1#

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

相关问题