Java 使用Spring批处理Tasklet中的Spring数据流结果集
我想在Spring批处理Tasklet步骤之后,将一些数据从数据库中流出来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
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 {
...