Java Flyway db首先迁移,用于从属Jar-Spring引导
我有一个SpringBootBase项目,构建为一个jar。这个jarJava Flyway db首先迁移,用于从属Jar-Spring引导,java,spring-boot,maven,flyway,spring-boot-maven-plugin,Java,Spring Boot,Maven,Flyway,Spring Boot Maven Plugin,我有一个SpringBootBase项目,构建为一个jar。这个jarbase-0.0.1-SNAPSHOT.jar文件在db/migration/*.sql 此base-0.0.1-SNAPSHOT.jar作为依赖项添加到impl-0.0.1-SNAPSHOT-boot.jar中。同样,这个impl引导jar正在db/migration/*.sql中进行flyway迁移 基本jar的flyway迁移创建表,impl引导jar更改由基本jar创建的相同表 在这个场景中,我需要先运行base-ja
base-0.0.1-SNAPSHOT.jar
文件在db/migration/*.sql
此base-0.0.1-SNAPSHOT.jar
作为依赖项添加到impl-0.0.1-SNAPSHOT-boot.jar
中。同样,这个impl引导jar正在db/migration/*.sql
中进行flyway迁移
基本jar的flyway迁移创建表,impl引导jar更改由基本jar创建的相同表
在这个场景中,我需要先运行base-jar的flyway脚本,然后再运行impl-boot-jar
基本jar中的迁移脚本
db/migration/v1_uuucreate.sql,db/migration/v2\u create.sql impl jar中的迁移脚本 db/migration/v3__create.sql 当impl-jar的
mvn clean安装时,我遇到了这个错误
org.springframework.beans.factory.BeanCreationException:错误
创建在类路径中定义了名为“flywayInitializer”的bean
资源
[org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]:
调用init方法失败;嵌套异常是
org.flywaydb.core.internal.command.DbMigrate$FlywayMigrateException:
迁移V3\uuu create.sql失败
-------------------------------SQL状态:42S02错误代码:42102
消息:未找到表“基本表”;SQL语句:
我已经在基本jar包中添加了迁移脚本,但仍然没有执行基本jar的flyway脚本
在impl引导jar的mvn构建过程中,如何首先执行基本包flyway脚本,然后执行impl引导jar的下一个脚本
更新1:
下面的插件将基本jar打包为另一个spring boot应用程序的一部分
org.apache.maven.plugins
maven jar插件
罐子
包裹
通用域名格式
**/实体/*
**/服务/*
${basedir}/src/main/resources/db/migration/*
impl jar的pom.xml
com.group
基本0.0.1-SNAPSHOT
通用域名格式
在这两个POM中,没有提到与flyway迁移配置相关的内容。默认情况下,它使用默认的flyway配置。我假设“基本”项目jar工件本身不是spring boot应用程序,我的意思是它不是用spring boot maven插件创建的,因为如果不是这样,它就不能作为依赖项包含在impl boot
模块中(因为spring启动应用程序不是一个真正的jar,所以它不工作)
基于这一假设,flyway扫描您的JAR和“classes”文件夹,并纯粹在运行时查找迁移。这意味着从base和impl迁移之间应该有任何区别,只要它们位于预定义位置的类路径中。
如果找不到base的迁移,那么可能会出现以下情况(在我看来,我可能遗漏了一些东西,但希望它能为调查提供一些方向):
如果基本jar没有正确打包,请在Winrar/Winzip中打开工件,并确保迁移确实符合所需的布局
jar未正确打包到spring boot应用程序中。应用程序中的依赖jar通常位于boot-INF/lib
文件夹中,因此请确保它确实出现在那里
Flyway迁移位置混乱。Spring boot可以在应用程序.properties
/应用程序.yml
中包含各种Flyway定义,请参阅,特别是属性Spring.Flyway.locations
也许数据库的模式是混乱的,一般来说flyway迁移不应该包含模式名称,但这通常取决于许多其他因素,所以我只是作为一个一般方向来提到它
最后但并非最不重要的一点,您可以在实际执行迁移的代码中放置一个断点:查看并查看通过调试解决了哪些迁移
您是否配置了maven插件来执行迁移?是否可以添加这些配置?在“impl”的pom中是否也有任何相关配置模块?请将所有这些信息添加到问题中。我还假设,基本jar本身不是spring boot工件,这意味着它不使用spring boot maven插件,对吗?@MarkBramnik请检查问题的更新为什么flyway在maven clean安装期间运行?是否有spring boot测试?@MarkBramnik它在安装期间尝试运行测试。但即使我在测试阶段禁用,在运行过程中,它也会因相同的错误而中断,所以前几天我必须完全这样做,所以我不会发布答案,而是将链接发布到帮助我的答案。我解压后发现基站没有打包迁移。然后我给出了正确的路径,它成功了。!
<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>
<dependency> <groupId>com.group</groupId>
<artifactId>base</artifactId> <version>0.0.1-SNAPSHOT</version>
<classifier>com</classifier> </dependency>