一尘不染

在Sprint引导Web应用程序中运行脚本

spring-boot

我有一个打包为WAR文件的Spring Boot Web应用程序,我希望能够按需运行一些任务(脚本或命令)。例如:

  • 初始化数据库架构
  • 编程方式* 播种数据库 *
  • 新版本的应用程序需要进行数据迁移(移动文件,数据库操作等)时
  • 验证存储的文件和数据库内容之间的数据完整性

如果这些“命令”可以访问与Web应用程序相同的相同的bean(服务,DAO)和模型,则将更容易实现。我希望我必须在某个地方创建一个Spring应用程序上下文来实现。我还希望将这些命令与应用程序的其余部分打包在一起,以便与它们一起进行测试并易于部署。

本质上,我想知道如何实现与Laravel的工匠命令(PHP)类似的功能

我已经读过在这里和这里在WAR中运行类的信息。我正在搜索打包和运行命令的“Spring之路”。为此,我是否需要集成Spring
Batch作业
?据我了解,Spring
Batch是用于较大的工作负载的,可以分为多个批次。我应该咬一下子弹,然后将命令放在引用第一个模块的另一个Maven模块中吗?

更新

我实现了一个ApplicationRunner(感谢Stefan!),以查看它们的工作方式,并发现它们在刷新Spring应用程序上下文之后运行。这意味着在运行程序执行之前,整个Web应用程序已初始化并处于活动状态。这包括MVC终结点映射程序和配置中定义的计划任务。尽管这绝对有用,但是我需要在所有不活动的情况下运行命令,因为它可能与命令冲突(尤其是在命令运行期间出现瞬态数据状态)。

更新2

我只需要创建另一个可执行jar,即可使用来创建Spring
Boot应用程序CommandLineRunner。如果使用3个模块,则可以引用Web应用程序中的所有bean:

  1. 弹簧“服务” Bean模块
  2. Web应用程序模块
  3. 命令行运行程序模块

阅读 180

收藏
2020-05-30

共1个答案

一尘不染

您可以使用ApplicationRunner参阅spring boot应用程序亚军。在应用程序启动后,将执行运行程序,并且您可以访问spring上下文。

CommandLineRunner班正是用于此目的。

2020-05-30