【发布时间】:2020-12-31 18:58:42
【问题描述】:
我有一个构建为 jar 的 Spring Boot 基础项目。这个 jar base-0.0.1-SNAPSHOT.jar 文件在 db/migration/*.sql 中有 flyway 迁移脚本
这个 base-0.0.1-SNAPSHOT.jar 作为依赖添加到 impl-0.0.1-SNAPSHOT-boot.jar 中。同样,这个 impl 引导 jar 在 db/migration/*.sql 中进行了 flyway 迁移。
base jar 的 flyway 迁移创建表,impl boot jar 更改由 base jar 创建的同一个表。
在这种情况下,我需要先运行 base jar 的 flyway 脚本,然后必须遵循 impl boot jar,
基础 jar 中的迁移脚本
db/migration/v1__create.sql,
db/migration/v2__create.sql
impl jar 中的迁移脚本
db/migration/v3__create.sql
当 mvn clean install 的 impl jar 时,我收到了这个错误
org.springframework.beans.factory.BeanCreationException: 错误 创建在类路径中定义的名称为“flywayInitializer”的bean 资源 [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: 调用 init 方法失败;嵌套异常是 org.flywaydb.core.internal.command.DbMigrate$FlywayMigrateException: 迁移 V3__create.sql 失败 ------------------------------- SQL 状态:42S02 错误代码:42102 消息:未找到表“BASE_TABLE”; SQL语句:
我已经在base jar包中添加了迁移脚本,但是base jar的flyway脚本仍然没有执行。
在impl boot jar的mvn build过程中,如何先执行base package flyway脚本,再执行impl boot jar的next?
更新 1:
基础 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>
在这两个 poms 中都没有提到与 flyway 迁移配置相关的内容。默认情况下,它使用默认的flyway配置。
【问题讨论】:
-
你有一个配置为执行迁移的 maven 插件 - 你能添加这些配置吗? “impl”模块的pom中是否也有相关配置?请将所有这些信息添加到问题中。我还假设,基础 jar 本身不是 Spring Boot 工件,这意味着它不使用 spring-boot-maven-plugin,对吧?
-
@MarkBramnik 请检查问题的更新
-
为什么在 maven 全新安装期间 flyway 会运行?你有春季启动测试吗?
-
@MarkBramnik 它尝试在测试期间运行。但即使我在测试阶段禁用,在运行期间它也会出现同样的错误
-
所以前几天我不得不这样做,所以我不会发布答案,而是发布对我有帮助的答案的链接。 the answer
标签: java spring-boot maven flyway spring-boot-maven-plugin