Java 使用Spring批处理Tasklet中的Spring数据流结果集

Java 使用Spring批处理Tasklet中的Spring数据流结果集,java,spring,spring-data-jpa,java-stream,spring-batch,Java,Spring,Spring Data Jpa,Java Stream,Spring Batch,我想在Spring批处理Tasklet步骤之后,将一些数据从数据库中流出来 public class TaskletUpdateAll implements Tasklet { @Autowired private AdRepository adRepository; @Override public RepeatStatus execute(StepContribution sc, ChunkContext cc) { return Repe

我想在Spring批处理Tasklet步骤之后,将一些数据从数据库中流出来

public class TaskletUpdateAll implements Tasklet {
    @Autowired
    private AdRepository adRepository;

    @Override
    public RepeatStatus execute(StepContribution sc, ChunkContext cc) {

        return RepeatStatus.FINISHED;
    }

    @AfterStep
    @Transactional(readOnly = true)
    public ExitStatus afterStepMethod(StepExecution stepExecution) {
        try (Stream<Pair<String, String>> adStream = adRepository.streamAll();) {
            adStream.forEach((Pair ad) -> {
                // Process ad 
            });
        }
        return ExitStatus.COMPLETED;
    }
}
我还确保在作业的配置类中包含
@EnableTransactionManagement
注释,正如


你知道我现在做的是可能的,还是我做错了吗?

试着把这个方法封装在一个
用resources试试
?是的,我在前面看到了这个答案,并尝试将这个方法包装成一个
try
,但没有效果,所以我删除了它以保持示例的简单性,但为了防止其他人有同样的想法,我又添加了一个。
@Repository
public interface AdRepository extends JpaRepository<Ad, Long> {

    @QueryHints(value = @QueryHint(name = "HINT_FETCH_SIZE", value = "" + Integer.MIN_VALUE))
    @Query(value = "SELECT href, provider FROM ad", nativeQuery = true)
    Stream<Pair<String, String>> streamAll();

    ...
}
...
@Configuration
@EnableTransactionManagement
public class MainTaskletsConfig {
...