【发布时间】:2017-09-08 12:33:36
【问题描述】:
我们有一个使用 Spring Integration 和 Spring Batch 的 Spring Boot 应用程序。我们在轮询器中放置一个文件并对其进行处理。此过程将记录插入数据库,然后将它们读回进行一些处理并写入文件。假设有 10 条记录。我们第一次读取 10 条记录,写入 10 条记录。在不停止服务器的情况下,我们通过 SQL 客户端删除数据库上的所有记录,再次运行同一个文件,我们读取 10 条记录,写入 20 条记录。我相信数据源正在进行一些 JPA 或缓存。我们尝试关闭 JPA 和缓存的几个自动配置选项,但我们没有找到关闭缓存的正确配置选项。
为问题添加更多细节。
基本上我们有一个带有 FileHandler 的 cron 调度程序。这个handleFile方法我们有以下。
public File handleFile(File file) throws Throwable {
JobParametersBuilder jobParametersBuilder = new JobParametersBuilder();
Job job = (Job) appContext.getBean("processInitialFileJob");
JobExecution jb = jobLauncher.run(job, jobParametersBuilder.toJobParameters());
....
}
我们可以对上面的代码做些什么来确保它有一个新的 JPA 会话或根本不使用 JPA 会话?该作业每次都需要从数据库中读取,而不是数据库的缓存表示。
【问题讨论】:
标签: spring-boot spring-integration spring-data-jpa spring-batch