在运行时管理和重新部署计划任务

时间:2016-01-13 14:07:18

标签: java spring spring-boot jvm scheduled-tasks

我正在寻找解决方案/架构来实现以下目标:

  • Java应用程序(嵌入式Tomcat上的Spring Boot)利用各种计划任务(例如使用Spring的@Scheduled或Quartz Scheduler等工具)。

  • 我希望能够在不停止主应用程序或干扰其他任务的情况下添加/删除,启动/停止和更新计划任务。

我找到了以编程方式启动/停止/重新定时任务的引用,但是我没有办法在没有重新启动整个应用程序的情况下更新某些任务的代码吗?

约束

  • 我想重复使用现有的应用程序代码,因此不希望以其他语言实现任务并通过任何其他方式(例如cronjobs)执行它们。

  • 我不能让每个任务在自己的虚拟机中作为单独的应用程序运行(因为有可用的RAM)。

我能想到的一个选择是拆分应用程序,以便主应用程序是嵌入式Tomcat上的Spring Boot App。然后,每个计划任务成为自己构建为WAR的应用程序,并部署到一个共享应用程序容器中。我假设在这种情况下,所有任务将共享JVM,同时可单独管理/部署。我认为缺点是更复杂的构建过程,对共享应用程序代码的依赖性,如果应用程序代码发生变化,更复杂的集成测试以及一些开销,可能需要重新部署部分/全部任务。将每个操作作为单独的WAR操作。

这是一个理智的解决方案吗?还有哪些更好的选择?其中一个工具(JVM,Spring,Quartz,......)内置了一些我缺少的东西吗?

0 个答案:

没有答案