代码之家  ›  专栏  ›  技术社区  ›  Tyvain

Spring批处理-保持服务器运行

  •  0
  • Tyvain  · 技术社区  · 6 年前

    我做了这个春季批处理项目(csv到数据库,经典)-工作很好: https://github.com/Tyvain/Spring-Batch-Generic-Bulk

    在一个单独的项目中,我用vaadin制作了一个应用程序,我可以上传一个文件: https://github.com/Tyvain/vaadin-simple-upload-file

    ->我们需要在上载文件时触发作业。

    因此,我将这两个项目重组为一个应用程序,步骤如下:

    1. 禁用批处理:job.enabled:false(在application.yml中)
    2. 在POM中添加所需的vaadin libaries
    3. 添加视图(MeaveV.java)。

    此修改的来源: https://github.com/Tyvain/Spring-Batch-Generic-Bulk/tree/include-vaadin-upload-page

    在这一点上,我仍然不确定如何启动作业,但我面临另一个问题:当我启动应用程序时,它会停止。在Vaadin应用程序中的服务器不在这里。

    编辑: 当我从作业配置中删除这些注释时,服务器将保持运行:

    //@Configuration
    //@EnableBatchProcessing
    

    1/是否可以让我的服务器在启用Spring批处理的情况下运行?

    2/这是错误的做法吗?

    解决方案工作: https://github.com/Tyvain/ProcessUploadedFile-Vaadin_SpringBatch

    2 回复  |  直到 6 年前
        1
  •  4
  •   Mahmoud Ben Hassine    6 年前

    在Web服务器中运行Spring批处理作业时,需要设置 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

        2
  •  -1
  •   Tatu Lund    6 年前

    如果您希望在上传后立即处理上传的文件,那么Spring批处理方法不正确。我建议在上传后使用@async和completeTableFuture在后台线程中处理它,请参阅以下详细信息: Spring @Async with CompletableFuture