我制作了这个 Spring 批处理项目(csv 到数据库,经典)- 工作正常:https://github.com/Tyvain/Spring-Batch-Generic-Bulk
在一个单独的项目中,我使用 vaadin 制作了一个应用程序,我可以在其中上传文件,效果很好: https://github.com/Tyvain/vaadin-simple-upload-file
-> 我们需要在上传文件时触发作业。
因此,我通过以下步骤将这 2 个项目重新组合到一个应用程序中:
- 禁用批处理:job.enabled: false(在 application.yml 中)
- 将所需的 vaadin 库添加到 pom
- 添加 View (MainView.java)。
此修改的来源:https://github.com/Tyvain/Spring-Batch-Generic-Bulk/tree/include-vaadin-upload-page
此时,我仍然不确定如何启动该作业,但我面临另一个问题:当我启动应用程序时,它停止了。留在 vaadin 应用程序中的服务器不会留在此处。
编辑: 当我从作业配置中删除这些注释时,服务器保持正常运行:
//@Configuration
//@EnableBatchProcessing
1/是否可以在启用 spring-batch 的情况下让我的服务器保持运行?
2/这是错误的做法吗?
解决方案工作:https://github.com/Tyvain/ProcessUploadedFile-Vaadin_SpringBatch
最佳答案
当您从 Web 服务器内运行 Spring Batch 作业时,您需要设置一个在后台异步运行作业的 JobLauncher
。此处详细解释:https://docs.spring.io/spring-batch/4.0.x/reference/html/job.html#runningJobsFromWebContainer
您需要使用异步TaskExecutor
实现(例如ThreadPoolTaskExecutor
)。请参阅此处的示例:https://docs.spring.io/spring-batch/4.0.x/reference/html/job.html#configuringJobLauncher
关于java - Spring Batch - 保持服务器运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51940165/