使用Spring在后台运行进程的推荐方法是什么?

dan*_*els 7 java spring spring-mvc spring-batch spring-boot

我正在使用Spring(Boot,MVC)开发一个Web应用程序,并且会有一些需要在后台运行的东西,所以我不会阻止请求.

目前我正在考虑拥有一个每5分钟运行一次的Spring Batch作业,并检查数据库中的表(jobs_queue),如果有事情要做,然后运行任务(根据表中每行所需的内容).

显然这不是一个很好的可扩展解决方案(我认为),因为我只有一个工作者(如果队列中有太多的工作,这个单个工作者可能无法处理负载)并且它还将至少生成一个DB每5分钟查询一次(也查看队列中是否有作业).

这样做的更好方法是什么?

Mic*_*lla 5

添加到@ kotabek的答案,Spring Batch能够通过消息启动作业.因此,您可以JobLaunchingMessagHandler监听启动作业的请求并相应地运行它.这允许您在本地(使用直接通道)或远程(通过像Rabbit这样的一些消息传递中间件)处理此用例.您可以在此处的文档中阅读更多相关信息:http://docs.spring.io/spring-batch/reference/htmlsingle/#launching-batch-jobs-through-messages


小智 2

我建议您使用 RabbitMQ 或 ActiveMQ。因此,您可以在查询中编写任务,当某人或某物添加任务时,您的工作就会起作用。我认为你可以将它与数据库集成并监听插入事件。