Spring boot Flyway Jooq Code gen maven 插件顺序

Posted

技术标签:

【中文标题】Spring boot Flyway Jooq Code gen maven 插件顺序【英文标题】:Spring boot Flyway Jooq Code gen maven plugin order 【发布时间】:2020-08-01 12:20:37 【问题描述】:

如何强制 flyway:migrate 始终在 jooq:generate-sources 之前执行? 我正在使用带有 Spring Boot 的 Maven 包装器。

<plugin>
            <groupId>org.flywaydb</groupId>
            <artifactId>flyway-maven-plugin</artifactId>
            <version>6.3.3</version>
        </plugin>
        <plugin>
            <groupId>org.jooq</groupId>
            <artifactId>jooq-codegen-maven</artifactId>
            <version>3.13.1</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <generator>
                    <database>
                        <name>org.jooq.meta.postgres.PostgresDatabase</name>
                        <inputSchema>public</inputSchema>
                    </database>
                    <target>
                        <packageName>bg.kotz.db</packageName>
                        <directory>src/main/java</directory>
                    </target>
                </generator>
            </configuration>
        </plugin>

【问题讨论】:

【参考方案1】:

当您在src/main/java 中生成代码时,Maven 中的一切都开始崩溃。最好保持默认生成到target/...,或者,如果您想签入生成的源,请为 Flyway 迁移和 jOOQ 代码生成创建单独的 Maven 项目

【讨论】:

【参考方案2】:

您还必须将executions 块添加到flyway-maven-plugin 部分,以使flyway 在generate-sources 步骤下执行迁移:

<plugin>
  <groupId>org.flywaydb</groupId>
  <artifactId>flyway-maven-plugin</artifactId>
  <version>6.3.3</version>
  <executions>
     <execution>
        <phase>generate-sources</phase>
        <goals>
            <goal>migrate</goal>
        </goals>
     </execution>
  </executions>
</plugin>
<plugin>
  <groupId>org.jooq</groupId>
  <artifactId>jooq-codegen-maven</artifactId>
  <version>3.13.1</version>
  <executions>
     <execution>
        <phase>generate-sources</phase>
        <goals>
            <goal>generate</goal>
        </goals>
     </execution>
  </executions>
  <configuration>
    <generator>
       <database>
          <name>org.jooq.meta.postgres.PostgresDatabase</name>
          <inputSchema>public</inputSchema>
        </database>
        <target>
          <packageName>bg.kotz.db</packageName>
          <directory>src/main/java</directory>
        </target>
      </generator>
    </configuration>
  </plugin>
</plugins>

【讨论】:

它工作了,有点。当我输入spring-boot:运行它时:1.迁移架构2.使用jooq生成的类,3.编译并启动,但在第3步它尝试再次迁移并失败并出现以下错误:“消息:错误:关系”foo “已经存在”不知道为什么,flyway_schema_history 存在并且有记录。 您在应用中使用什么版本的 flyway?

以上是关于Spring boot Flyway Jooq Code gen maven 插件顺序的主要内容,如果未能解决你的问题,请参考以下文章

如何一起使用Spring启动,JOOQ和Flyway?

Spring-Boot 不适用于 Flyway

Spring Boot 2.3.9.Release新版本发布,Spring Boot 2.3.9新版本发布

Flyway 和 Spring Boot 集成

jooQ spring boot Multiple Schema(读写拆分)

如何使用 Spring-Boot config 配置 JOOQ 设置?