运行 Spring Boot Web 应用程序中的脚本
Running Scripts in a Sprint Boot Web Application
我有一个 Spring 打包为 WAR 文件的启动 Web 应用程序,我希望能够 运行 按需执行某些任务(脚本或命令)。例如:
- 初始化数据库模式
- 以编程方式为数据库播种
- 新版本应用程序需要时进行数据迁移(移动文件、数据库操作等)
- 验证存储文件和数据库内容之间的数据完整性
如果这些 "commands" 可以访问与 Web 应用程序本身相同的 bean(服务、DAO)和模型,那么实施起来会容易得多。我希望我必须在某个地方创建一个 Spring 应用程序上下文才能发生这种情况。我还更愿意将这些命令与应用程序的其余部分打包在一起,以便与它一起进行测试并易于部署。
本质上,我想知道如何实现类似于 Laravel's artisan commands (PHP) 的东西。
我在 运行ning a class inside a WAR here and here. I'm searching for the "Spring way" of packaging and running commands. Do I have to integrate Spring Batch jobs 上读过这个吗?据我了解,Spring Batch 适用于较大的工作负载,可以分成多个批次。我应该硬着头皮将命令放在引用第一个的第二个单独的 Maven 模块中吗?
更新
我实现了一个 ApplicationRunner
(感谢 Stefan!)以查看它们是如何工作的,并发现它们在 Spring 应用程序上下文刷新后 运行。这意味着整个 Web 应用程序在 运行ner 执行之前已初始化并处于活动状态。这包括 MVC 端点映射器和配置中定义的计划任务。虽然这绝对有用,但我需要 运行 命令,因为它可能与命令冲突(尤其是在命令 运行s 期间的瞬态数据状态)。
更新 2
我只需要创建另一个可执行 jar,它使用 CommandLineRunner
创建 Spring 启动应用程序。如果我使用 3 个模块,这可以引用 Web 应用程序中的所有 bean:
- spring "service" beans 模块
- 网络应用模块
- 命令行运行ner模块
您可以使用ApplicationRunner
参见 spring boot application runner。
运行程序在应用程序启动后执行,您可以访问 spring 上下文。
CommandLineRunner
class 正是用于此目的。另见 How does a Spring Boot console based application work?
通过使用spring data jpa,你可以轻松实现这个
1-通过开发代表您的数据库模式的实体 类 并设置 属性 spring.jpa.hibernate.ddl-auto=create,当您 运行 应用程序(小心,因为每次你 运行 模式都会被删除并为你重新创建)
2-你可以在 import.sql 中包含任何 sql 语句,它应该与配置文件一起放在资源文件夹中(这是一个休眠功能,但仍然可以很好地与 spring ).
我有一个 Spring 打包为 WAR 文件的启动 Web 应用程序,我希望能够 运行 按需执行某些任务(脚本或命令)。例如:
- 初始化数据库模式
- 以编程方式为数据库播种
- 新版本应用程序需要时进行数据迁移(移动文件、数据库操作等)
- 验证存储文件和数据库内容之间的数据完整性
如果这些 "commands" 可以访问与 Web 应用程序本身相同的 bean(服务、DAO)和模型,那么实施起来会容易得多。我希望我必须在某个地方创建一个 Spring 应用程序上下文才能发生这种情况。我还更愿意将这些命令与应用程序的其余部分打包在一起,以便与它一起进行测试并易于部署。
本质上,我想知道如何实现类似于 Laravel's artisan commands (PHP) 的东西。
我在 运行ning a class inside a WAR here and here. I'm searching for the "Spring way" of packaging and running commands. Do I have to integrate Spring Batch jobs 上读过这个吗?据我了解,Spring Batch 适用于较大的工作负载,可以分成多个批次。我应该硬着头皮将命令放在引用第一个的第二个单独的 Maven 模块中吗?
更新
我实现了一个 ApplicationRunner
(感谢 Stefan!)以查看它们是如何工作的,并发现它们在 Spring 应用程序上下文刷新后 运行。这意味着整个 Web 应用程序在 运行ner 执行之前已初始化并处于活动状态。这包括 MVC 端点映射器和配置中定义的计划任务。虽然这绝对有用,但我需要 运行 命令,因为它可能与命令冲突(尤其是在命令 运行s 期间的瞬态数据状态)。
更新 2
我只需要创建另一个可执行 jar,它使用 CommandLineRunner
创建 Spring 启动应用程序。如果我使用 3 个模块,这可以引用 Web 应用程序中的所有 bean:
- spring "service" beans 模块
- 网络应用模块
- 命令行运行ner模块
您可以使用ApplicationRunner 参见 spring boot application runner。 运行程序在应用程序启动后执行,您可以访问 spring 上下文。
CommandLineRunner
class 正是用于此目的。另见 How does a Spring Boot console based application work?
通过使用spring data jpa,你可以轻松实现这个
1-通过开发代表您的数据库模式的实体 类 并设置 属性 spring.jpa.hibernate.ddl-auto=create,当您 运行 应用程序(小心,因为每次你 运行 模式都会被删除并为你重新创建)
2-你可以在 import.sql 中包含任何 sql 语句,它应该与配置文件一起放在资源文件夹中(这是一个休眠功能,但仍然可以很好地与 spring ).