我有一个@JobScope
HibernateCursorItemReader在close方法失败,因为我的光标已经关闭,并且被AbstractStep.close()
和JobSynchronizationManager.release()
调用了两次。
@Configuration
@ConfigurationProperties("job.entity")
public class EntityJobConfig {
@Setter
@NotNull(message = "chunkSize cannot be null")
@Min(value = 1, message = "chunkSize must be 1 at least")
private int chunkSize;
@Autowired
private JobBuilderFactory jobs;
@Autowired
private StepBuilderFactory steps;
@Autowired
private EntityManager entityManager;
@Bean
Job job() {
return this.jobs.get("job")
.start(this.step())
.build();
}
@Bean
Step step() {
return this.steps.get("step")
.<Entity, Entity>chunk(this.chunkSize)
.reader(this.reader(null))
.writer(this.writer())
.build();
}
@Bean
@JobScope
HibernateCursorItemReader<Entity> reader(@Value("#{jobParameters['entityId']}") Integer entityId) {
HibernateCursorItemReader<Entity> reader = new HibernateCursorItemReader<>();
reader.setUseStatelessSession(false);
reader.setSessionFactory(this.entityManager.getEntityManagerFactory().unwrap(SessionFactory.class));
reader.setFetchSize(this.chunkSize);
reader.setQueryString("...");
reader.setParameterValues(ImmutableMap.of("entityId", entityId));
return reader;
}
}
这是预期的行为吗?
答案 0 :(得分:0)
我需要深入研究一下@StepScope
或@JobScope
关闭读者/作者的原因,但无论如何,这都是我们可以在读者中轻松解决的问题。我打开了一个Jira问题来跟踪解决这个问题。您可以在此处跟踪:https://jira.spring.io/browse/BATCH-2619