当前位置: 首页 > 知识库问答 >
问题:

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

邵畅
2023-03-14

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

  • 初始化数据库模式
  • 以编程方式为数据库设定种子
  • 新版本应用程序(移动文件、数据库操作等)需要时进行数据迁移
  • 验证存储文件和数据库内容之间的数据完整性

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

从本质上讲,我想知道如何实现类似于拉拉维尔的工匠命令(PHP)的东西。

我在这里和这里读过关于在WAR中运行课程的文章。我正在寻找打包和运行命令的“Spring方式”。我是否必须为此集成Spring批处理作业?据我所知,Spring Batch适用于可以分成多个批次的大型工作负载。我是否应该咬紧牙关,把命令放在第二个单独的maven模块中,该模块引用了第一个?

我实现了一个应用程序运行程序(谢谢斯特凡!)来看看它们是如何工作的,发现它们是在Spring应用程序上下文刷新后运行的。这意味着在运行程序执行之前,整个Web应用程序都已初始化并处于活动状态。这包括配置中定义的MVCendpoint映射器和计划任务。虽然这肯定很有用,但我需要在所有不活动的时候运行命令,因为它可能与命令发生冲突(尤其是在命令运行期间的瞬态数据状态)。

我只需要创建另一个可执行的jar,它使用< code>CommandLineRunner创建一个Spring Boot应用程序。如果我使用3个模块,这可以引用web应用程序中的所有beans:

  1. Spring"service"bean模块
  2. Web应用程序模块
  3. 命令行运行模块

共有2个答案

卫华奥
2023-03-14

通过使用Spring data jpa,您可以轻松实现这一点

1-通过开发代表数据库模式的实体类并设置属性spring.jpa.hibernate.ddl-auto=create,当您运行应用程序时,将为您创建模式(请注意,因为每次运行模式时,都会删除并为您重新创建模式)

2-您可以在import.sql中包含任何sql语句,这些语句应该放在配置文件的resources文件夹中(这是hibernate的一个特性,但在spring中仍然可以很好地工作)。

用jpa初始化数据库

用hibernate初始化数据库

柳鸿信
2023-03-14

您可以使用ApplicationRunner,请参阅spring boot application runner。跑步者在应用程序启动后执行,您可以访问spring上下文。

< code>CommandLineRunner类正是为此而使用的。另请参阅基于Spring Boot控制台的应用程序是如何工作的?

 类似资料:
  • 问题内容: 我有一个现有的Flask应用程序,并且想找到通往另一个应用程序的路线。更具体地说,第二个应用程序是Plotly Dash应用程序。如何在现有的Flask应用程序中运行Dash应用程序? 我还尝试将路由添加到Dash实例,因为它是Flask应用程序,但出现错误: 问题答案: 从文档: 基本的Flask应用程序可从访问app.server。 你还可以将自己的Flask应用实例传递到Dash

  • 我试图在SpringMVC中运行SpringBoot应用程序,在SpringMVCPOM中添加SpringBoot应用程序依赖项,并扫描SpringBoot包,但我面临以下问题

  • 问题内容: 我想使用html applet标记在我的Web应用程序中运行简单applet,但是它给出了类似的错误 java.lang.ClassNotFoundException:MyApplet 请给我示例应用程序,如果可能的话..... 问题答案: 问题是applet引擎在您定义的代码库中找不到MyApplet类。 这是因为您在/ WEB-INF / classes目录中进行了分类。该目录受s

  • 问题内容: 我正在用Java开发使用Lua脚本的Android游戏。为了执行这些脚本,我将LuaJ与Java的ScriptEngine类一起使用。例如… 但是,Android显然不支持此功能(这与android没有完整的JVM有关,我在某处读过)。有什么方法可以在Android上使用Lua脚本吗?也许有一个LuaJ替代方案?也许有一种直接使用LuaJ编译和执行Lua脚本的方法(尽管我看不到如何)。

  • 我的项目有这个要求,用户上传一个必须推送到sql服务器数据库的CSV文件。我按照下面的基本示例将CSV文件加载到sql服务器数据库中。https://github.com/michaelcgood/Spring-Batch-CSV-Example通过更改数据源来运行此存储库,这里我们使用sql服务器而不是内存数据库。 以下是POM文件的新增内容: 添加到应用程序中。属性文件 下面是运行代码库时产生

  • 我正在编写一个Django应用程序,它需要执行长异步任务。最初的想法是从执行该任务的视图启动子流程,并在另一个视图中监视进度。 当应用程序通过启动时,这个想法可以很好地工作,但在uwsgi下运行时就不行了。子进程已启动,但在视图返回后,uwsgi等待子进程结束,这打破了整个想法。 我可以在uwsgi日志中看到请求详细信息(生成的字节数等),但是套接字没有关闭,所以浏览器也在等待。 我已经看到了运行