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

Flyway数据库优先迁移,用于从属jar-Spring Boot

张承颜
2023-03-14

当impl jar的mvn clean install时,我收到了这个错误

org.springframework.beans.factory.beanCreationException:创建类路径资源[org/springframework/boot/autocigure/flyway/flywayautociguration$flywayconfiguration.class]中定义的名为“flyway初始化器”的bean时出错:调用init方法失败;嵌套异常为org.flywaydb.core.internal.command.dbmigrate$flywaymigrateexception:Migration v3__create.SQL失败---------------------SQL状态:42S02错误代码:42102消息:找不到表“base_table”;SQL语句:

我已经在基本jar包中添加了迁移脚本,但是基本jar的flyway脚本仍然没有执行。

如何先执行基本包flyway脚本,然后在mvn构建impl boot jar时执行impl boot jar的下一个脚本?

更新1:

base jar被以下插件打包为另一个spring boot应用程序的一部分,

       <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <executions>
              <execution>
                  <goals>
                      <goal>jar</goal>
                  </goals>
                  <phase>package</phase>
                  <configuration>
                      <classifier>com</classifier>
                      <includes>
                          <include>**/entities/*</include>
                          <include>**/services/*</include>
                      
<include>${basedir}/src/main/resources/db/migration/*</include>
                      </includes>
                  </configuration>
              </execution>
          </executions>           </plugin>

impl jar的pom.xml具有

  <dependency>            <groupId>com.group</groupId>
      <artifactId>base</artifactId>           <version>0.0.1-SNAPSHOT</version>
      <classifier>com</classifier>        </dependency>

在这两个POM中,没有提到任何与flyway迁移配置相关的内容。默认情况下,它使用默认flyway配置。

共有1个答案

微生慈
2023-03-14

我假设“基础”项目jar工件本身不是Spring Boot应用程序,我的意思是它不是用spring-boot-maven-plugin创建的,因为如果不是这样,它就不能作为依赖项包含在impl-boot模块中(因为Spring Boot应用程序实际上不是一个jar,所以它不能工作)

基于这个假设,flyway会扫描您的jars和“classes”文件夹,并纯粹在运行时中查找迁移。这意味着从base和impl的迁移应该有任何区别--只要它们在类路径中预定义位置的长度就可以。如果没有找到Base的迁移,那么以下是可能的(在我的脑海中,我可能遗漏了一些东西,但希望它能为调查提供一些方向):

  1. 基本jar未正确打包,请在WinRAR/WinZip中打开该工件,并确保迁移确实符合所需的布局。
  2. jar未正确打包到Spring Boot应用程序中。应用程序中的依赖JAR通常在boot-inf/lib文件夹中找到,因此确保它确实出现在那里。
  3. 飞道迁移位置混乱。Spring boot可以在application.properties/application.yml中包含各种flyway定义,请参阅此处,特别是属性Spring.flyway.locations.
  4. 可能数据库的模式搞乱了,一般来说flyway迁移不应该包含模式名,但这通常取决于许多其他因素,所以我只是作为一个总体方向来提到它
  5. 最后但并非最不重要的是,您可以在实际执行迁移的代码中放置断点:请参阅此处并查看通过调试解决了哪些迁移
 类似资料:
  • 我正在尝试使用flyway,但是我有一个不知道如何解决的情况: 当我应用STANDARD脚本时,我必须运行V1.0__create_table_TAB1.sql当我将脚本应用到customer1时,TAB1表是一个视图,因此我必须运行V1.0__creaate_view_TAB1_to_schema1.sql。 实际: 应始终应用sql_common文件夹的脚本,但不应应用 V1.0(创建表 TA

  • 问题内容: 我对ES非常陌生。我一直在尝试搜索数据库迁移工具,但找不到。我想知道是否有人可以帮助我指出正确的方向。 我将使用Elasticsearch作为项目中的主要数据存储。我想对我在项目中开发新模块时运行的所有映射和配置更改/数据导入/数据升级脚本进行版本控制。 过去,我使用过数据库版本控制工具,例如Flyway或Liquibase。 我可以在ES中使用任何框架/脚本或方法来实现类似目的吗?

  • 是否有可能从maven flyway插件的罐子迁移?我对sqls和java(编译到类)没有问题,但对jars没有成功。类路径设置正确。

  • 我目前正在评估Flyway和Liquibase在我们现有的大型项目中的使用情况。这两种方法似乎都适合sql迁移,但不幸的是,我们还需要偶尔进行文件系统迁移(比如应用xsl转换)。 我看不出为什么Flyway在技术上不能以java迁移的名义做到这一点,但我想知道,尝试这样做是否是在一个方孔中安装一个圆钉-也许还有另一个工具可以跟踪文件系统相关的东西?不过,我确实很喜欢只使用一个迁移工具来完成所有任务

  • 在我的Spring Boot项目中,我正在尝试为MongoDb实现一个数据库迁移,我对MongoDb和mongock非常陌生<下面是关于错误的一些详细信息,以及到目前为止我所做的工作: > 我的pom有以下依赖项: 我已经用“ 并将少量数据插入DB。 在application.properties文件中添加以下行 蒙哥克。更改日志扫描包=com。产品目标配置 现在,当我构建项目“mvn clean

  • 我正在尝试使用gradle脚本迁移一些SQL表: 在脚本目录中,我只有一个SQL脚本: 当我运行 时,我得到输出: 在测试数据库中,创建了schema_version表,但没有创建表位置。 flyway的目录结构是: 我是否缺少飞行路线的一些其他设置?非常不幸的是,我没有收到任何错误消息。