Как я могу настроить диалект postgres плагина jooq-codegen-maven с liquibase и без свойств подключения к базе данных

Я использую liquibase и jooq, и мне нужно сгенерировать свои pojo непосредственно из xml-файлов liquibase, но у меня проблема с переопределением диалекта H2 по умолчанию с помощью Postgres. На самом деле, я пытался настроить диалект через свойство в разделе конфигурации плагина, но он по-прежнему использует H2. Может кто-нибудь спросить меня, пожалуйста, как я могу заставить jooq использовать диалект postgres при чтении файлов xml и создании классов java.

Вот используемые версии библиотек

<properties>
    <jooq.version>3.13.4</jooq.version>
    <vertx-jooq.version>5.1.1</vertx-jooq.version>
    <postgres.version>42.2.12</postgres.version>
 </properties>

Вот моя конфигурация плагина

<plugin>
    <groupId>org.jooq</groupId>
    <artifactId>jooq-codegen-maven</artifactId>
    <version>${jooq.version}</version>
    <executions>
      <execution>
        <id>jooq-generate</id>
        <phase>generate-sources</phase>
        <goals>
          <goal>generate</goal>
        </goals>
      </execution>
    </executions>
    <dependencies>
      <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>${postgres.version}</version>
      </dependency>
      <dependency>
        <groupId>io.github.jklingsporn</groupId>
        <artifactId>vertx-jooq-generate</artifactId>
        <version>${vertx-jooq.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-core</artifactId>
        <version>3.3.9</version>
      </dependency>
      <dependency>
      <groupId>org.jooq</groupId>
      <artifactId>jooq-meta-extensions</artifactId>
      <version>${jooq.version}</version>
    </dependency>
    </dependencies>
    <configuration>
      <generator>
        <name>io.github.jklingsporn.vertx.jooq.generate.classic.ClassicReactiveVertxGenerator</name>
        <database>
          <name>org.jooq.meta.extensions.liquibase.LiquibaseDatabase</name>
          <properties>
            <property>
              <key>scripts</key>
              <value>src/main/resources/liquibase/tenant/changelog.xml</value>
            </property>
            <property>
              <key>changeLogParameters.contexts</key>
              <value>!test</value>
            </property>
            <-- unfortunately this property doesn't work -->
            <property>
              <key>dialect</key>
              <value>POSTGRES</value>
            </property>
          </properties>
          <outputSchemaToDefault>true</outputSchemaToDefault>
          <unsignedTypes>false</unsignedTypes>
          <forcedTypes />
        </database>
        <generate>
          <daos>true</daos>
          <fluentSetters>true</fluentSetters>
        </generate>
        <target>
          <packageName>org.folio.rest.jooq</packageName>
        </target>
        <strategy>
          <name>io.github.jklingsporn.vertx.jooq.generate.VertxGeneratorStrategy</name>
        </strategy>
      </generator>
    </configuration>
  </plugin>

person Илья Илья    schedule 10.08.2020    source источник


Ответы (1)


Начиная с jOOQ 3.14, источник данных org.jooq.meta.extensions.liquibase.LiquibaseDatabase для генератора кода jOOQ за кулисами используется H2 для моделируйте миграцию вместо фактического выполнения миграции в целевой базе данных. Это позволяет работать с jOOQ и вашими сценариями миграции Liquibase без фактического экземпляра базы данных и подключения. В будущем можно будет прозрачно запустить экземпляр PostgreSQL с помощью тестовых контейнеров: https://github.com/jOOQ/jOOQ/issues/6551

Вот пример того, как это настроить: https://github.com/jOOQ/jOOQ/tree/main/jOOQ-examples/jOOQ-testcontainers-example (не слишком сложно)

Если вы хотите работать с реальной базой данных PostgreSQL, просто запустите миграцию liquibase с помощью плагинов liquibase maven, прежде чем запускать генерацию кода jOOQ, подключив оба к одному и тому же серверу базы данных.

person Lukas Eder    schedule 11.08.2020
comment
Здравствуйте, @lucas-eder, Liquibase позволяет работать в автономном режиме. liquibase.org/blog/liquibase-without-a-database-connection Может быть, удастся использовать этот функционал? - person jumb0jet; 21.09.2020
comment
@jumb0jet: Как это конкретно поможет? - person Lukas Eder; 21.09.2020
comment
@lucas-eder, извините за беспокойство. У меня было неправильное предположение о том, как jOOQ генерирует код на основе определения схемы, и я не заметил, что для этого требуется работающая настоящая база данных. Я думал, что можно будет сгенерировать DDL, используя автономный режим Liquibase, а затем передать его в org.jooq.meta.extensions.ddl.DDLDatabase. Но потом я понял, что DDLDatabase использует H2 под капотом :| - person jumb0jet; 21.09.2020
comment
@ jumb0jet: Да, но это база данных в памяти, которую вам не нужно запускать. DDLDatabase или LiquibaseDatabase запустить его для вас, он должен быть прозрачным, если только вы не используете функции, специфичные для поставщика. Но я думаю, вы имели в виду что-то другое? Как этот автономный режим поможет? - person Lukas Eder; 23.09.2020