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

jOOQ 自动生成在进行 mvn 干净编译时进行液基数据库更新后未运行

陆琦
2023-03-14

我希望 jOOQ 基于我提供的库架构 xml 文件(而不是基于 db 连接)自动生成代码。如果我更改了 liquibase xml 文件中的某些内容,则更改将反映在数据库中,但我无法生成自动生成的新代码。我必须运行两次mvn干净编译,以便jOOQ了解更改。

我pom.xml的发电机部分是这样的。请帮助:

<configuration xmlns="http://www.jooq.org/xsd/jooq-codegen-3.16.3.xsd">
    <jdbc>
        <driver>org.postgresql.Driver</driver>
        <url>${spring.datasource.url}</url>
        <user>${spring.datasource.username}</user>
        <password>${spring.datasource.password}</password>
    </jdbc>
    <generator>
        <database>
            <name>org.jooq.meta.extensions.liquibase.LiquibaseDatabase</name>
            <name>org.jooq.meta.postgres.PostgresDatabase</name>
            <properties>

                <!-- Specify the classpath location of your XML, YAML, or JSON script. -->
                <property>
                    <key>scripts</key>
                    <value>liquibase-outputChangeLog.xml</value>
                </property>

                <!-- Whether you want to include liquibase tables in generated output

                     - false (default)
                     - true: includes DATABASECHANGELOG and DATABASECHANGELOGLOCK tables -->
                <property>
                    <key>includeLiquibaseTables</key>
                    <value>true</value>
                </property>

                <!-- Properties prefixed "database." will be passed on to the liquibase.database.Database class
                     if a matching setter is found -->
               
                <!-- The property "changeLogParameters.contexts" will be passed on to the
                     liquibase.database.Database.update() call (jOOQ 3.13.2+).
                     See https://www.liquibase.org/documentation/contexts.html -->
                <property>
                    <key>changeLogParameters.contexts</key>
                    <value>!test</value>
                </property>
            </properties>
            <inputSchema>public</inputSchema>
        </database>
    </generator>
</configuration>

共有1个答案

水昊阳
2023-03-14

通过在“液化数据库”之外添加“后数据库”,您只需覆盖该数据库的“速移数据库”配置即可

请查看jOOQ的LiquibaseDatabase的留档。它提到脚本属性应该描述迁移文件的类路径位置,而不是相对路径位置,例如。

<!-- Specify the classpath location of your XML, YAML, or JSON script. -->
<property>
  <key>scripts</key>
  <value>/database.xml</value>
</property>

(注意开头的斜线)。从jOOQ 3.16.5开始,它解决了Liquibase本身的不兼容更改(参见#13031),您现在可以使用相对路径以及附加的<code>rootPath</code>规范,这是Liquibase 4.0之后所必需的:

<!-- Specify the root path, e.g. a path in your Maven directory layout -->
<property>
  <key>rootPath</key>
  <value>${basedir}/src/main/resources</value>
</property>
    
<!-- Specify the relative path location of your XML, YAML, or JSON script. -->
<property>
  <key>scripts</key>
  <value>database.xml</value>
</property>

虽然 LiquibaseDatabase 可以在数据库简单时帮助加快速度,但只要您使用供应商特定的功能(存储过程、数据类型等),这种方法就不再可行。在实际的 PostgreSQL 数据库上运行迁移,然后从该数据库生成代码会更好。您可以使用测试容器来实现这一点,如本博客文章中所述。

 类似资料:
  • 我在构建过程中使用org.jooq.util.DefaultGenerator来生成jOOQ类来表示我的数据库模式。 当应用程序运行时,模式可能会在应用程序不知道的情况下更改。此类更改可能与已生成的代码兼容,也可能与已生成的代码不兼容。 如何在运行时检测生成的代码是否对特定模式仍然有效? 我正在寻找类似于布尔值stillValid=new SchemaValidator(存在的GeneratedC

  • 问题内容: 我在构建过程中使用来生成jOOQ类来表示我的数据库模式。 当应用程序运行时,架构可能会在应用程序不知道的情况下发生更改。这样的更改可能与已经生成的代码兼容,也可能与之不兼容。 如何在运行时中检测生成的代码是否仍然在特定模式下有效? 我正在寻找类似的东西 问题答案: 使用org.jooq.Meta的jOOQ 3.0解决方案 在即将到来的jOOQ 3.0中,可以通过新对象(通过功能请求#1

  • 对于多个数据库(和数据库服务器),我有完全相同的数据库定义。我如何告诉Jooq使用与我创建的连接到DB的“连接”相同的数据库? 示例(对于MySQL): jdbc:mysql://localhost:3306/tsm-我的开发数据库(tsm),用于生成代码 所有3个数据库都具有相同的定义、相同的表、索引等。TSM one是我们的应用程序使用的标准。 也许我应该使用DSL。使用(连接、设置)而不是?

  • 问题内容: 我有一个页面,其中发生了许多耗时的功能。我想做的是在过程的每个步骤完成后,更新网页以使用户知道刚刚完成的步骤。本质上,用户提交查询,然后服务器查询数据库,处理数据,绘制图像并在页面上显示结果。我想让网页说出该功能执行的步骤。它会说“先查询”然后“正在处理” …等等。 伪: 我已经研究过使用Ajax来更新页面而不重新加载它,但是根据我的简单理解(对Ajax零经验),客户端将向服务器请求文

  • 本周我开始在一些我正在做的项目中使用Maven,我使用Eclipse和m2e插件。我一直在研究它,但我找不到编译和打包的方法(据我所知,我可以做清洁,生成源,测试和安装)。如何用M2E实现这一点?

  • 我是Android Studio的新手,所以我面临一些问题。我正在寻找一种如何干净地项目的方法。 在Eclipse中,我会做<代码>项目-