失败时调用HibernateCursorItemReader的close方法

时间:2017-05-22 19:08:58

标签: spring-batch

我有一个@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;
    }
}

这是预期的行为吗?

1 个答案:

答案 0 :(得分:0)

我需要深入研究一下@StepScope@JobScope关闭读者/作者的原因,但无论如何,这都是我们可以在读者中轻松解决的问题。我打开了一个Jira问题来跟踪解决这个问题。您可以在此处跟踪:https://jira.spring.io/browse/BATCH-2619