Пружинная загрузочная жидкость. Выполнить DIFF между сущностями и базой данных - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь настроить жидкость в моем приложении для весенней загрузки. Я пытаюсь создать наборы изменений между моими сущностями и моей БД с помощью mvn liquibase:diff

Вот пример одной из моих сущностей:

package com.example.start.project.entity;

import static com.example.start.project.entity.DatabaseConstants.CREATED_AT;
import static com.example.start.project.entity.DatabaseConstants.CREATED_BY;
import static com.example.start.project.entity.DatabaseConstants.LEGACY_ID;
import static com.example.start.project.entity.DatabaseConstants.MODIFIED_AT;
import static com.example.start.project.entity.DatabaseConstants.MODIFIED_BY;
import static com.example.start.project.entity.DatabaseConstants.SCHEMA_NAME;
import static com.example.start.project.entity.DatabaseConstants.TABLE_PREFIX;
import static com.example.start.project.entity.PlantEntity.TSN_PREFIX;

import java.time.ZonedDateTime;
import java.util.UUID;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import org.springframework.data.annotation.Immutable;

@Entity
@Table(schema = SCHEMA_NAME, name = TABLE_PREFIX + TSN_PREFIX + "PLANT")
@Immutable
public class PlantEntity {

  /** Table short name. */
  static final String TSN = "PLNT";
  /** Table short name as prefix. */
  static final String TSN_PREFIX = TSN + "_";
  /** Id column name */
  static final String ID_COLUMN = TSN_PREFIX + DatabaseConstants.ID;

  private static final long serialVersionUID = 1L;

  @Id
  @Column(name = ID_COLUMN)
  private UUID id;

  @Column(name = TSN_PREFIX + LEGACY_ID)
  private Long legacyId;

  @Column(name = TSN_PREFIX + "NUMBER")
  private String number;

  @Column(name = TSN_PREFIX + "NAME")
  private String name;

  @Column(name = TSN_PREFIX + "TYPE")
  private String type;

  @Column(name = TSN_PREFIX + CREATED_BY)
  private String createdBy;

  @Column(name = TSN_PREFIX + CREATED_AT)
  private ZonedDateTime createdAt;

  @Column(name = TSN_PREFIX + MODIFIED_BY)
  private String modifiedBy;

  @Column(name = TSN_PREFIX + MODIFIED_AT)
  private ZonedDateTime modifiedAt;

  public UUID getId() {
    return id;
  }

  public void setId(UUID id) {
    this.id = id;
  }

  public Long getLegacyId() {
    return legacyId;
  }

  public void setLegacyId(Long legacyId) {
    this.legacyId = legacyId;
  }

  public String getNumber() {
    return number;
  }

  public void setNumber(String number) {
    this.number = number;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getType() {
    return type;
  }

  public void setType(String type) {
    this.type = type;
  }

  public String getCreatedBy() {
    return createdBy;
  }

  public void setCreatedBy(String createdBy) {
    this.createdBy = createdBy;
  }

  public ZonedDateTime getCreatedAt() {
    return createdAt;
  }

  public void setCreatedAt(ZonedDateTime createdAt) {
    this.createdAt = createdAt;
  }

  public String getModifiedBy() {
    return modifiedBy;
  }

  public void setModifiedBy(String modifiedBy) {
    this.modifiedBy = modifiedBy;
  }

  public ZonedDateTime getModifiedAt() {
    return modifiedAt;
  }

  public void setModifiedAt(ZonedDateTime modifiedAt) {
    this.modifiedAt = modifiedAt;
  }
}

А вот мое POM выглядит так :

*******
<dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-core</artifactId>
        <version>3.8.8</version>
      </dependency>
      <dependency>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-cdi</artifactId>
        <version>3.8.8</version>
      </dependency>
      <dependency>
        <groupId>org.liquibase.ext</groupId>
        <artifactId>liquibase-hibernate5</artifactId>
        <version>3.8</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  *********
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.liquibase</groupId>
          <artifactId>liquibase-maven-plugin</artifactId>
          <version>3.8.8</version>
          <configuration>
            <propertyFile>liquibase/liquibase.properties</propertyFile>
            <changeLogFile>liquibase/changeLogs/database.yaml</changeLogFile>

            <driver>${test.jdbc.driver}</driver>
            <url>${test.jdbc.url}?currentSchema=${test.jdbc.schema}</url>
            <username>${test.jdbc.userName}</username>
            <password>${test.jdbc.password}</password>

            <!--defaultSchemaName>${test.jdbc.schema}</defaultSchemaName>-->
            <changelogSchemaName>${test.jdbc.schema}</changelogSchemaName>

            <referenceDriver>liquibase.ext.hibernate.database.connection.HibernateDriver</referenceDriver>
            <referenceUrl>hibernate:spring:com.example.start.project.entity?dialect=org.hibernate.dialect.PostgreSQL95Dialect</referenceUrl>

             <diffChangeLogFile>${project.build.directory}/startup.db-diff.yaml</diffChangeLogFile>
             <outputChangeLogFile>${project.build.directory}/db-initial.yaml</outputChangeLogFile>

             <!-- Syntax: [objecttype from liquibase.structure.core]:[regex matching name] -->
            <diffExcludeObjects>sequence:.*_SEQ</diffExcludeObjects>
            <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
            <logging>debug</logging>

          </configuration>
          <executions>
            <execution>
              <phase>process-resources</phase>
              <goals>
                <goal>update</goal>
              </goals>
            </execution>
          </executions>
          <dependencies>
            <dependency>
              <groupId>${test.jdbc.groupId}</groupId>
              <artifactId>${test.jdbc.artifactId}</artifactId>
              <version>${test.jdbc.version}</version>
            </dependency>

            <dependency>
              <groupId>javax.validation</groupId>
              <artifactId>validation-api</artifactId>
              <version>${java-validation-api.version}</version>
            </dependency>

            <dependency>
              <groupId>org.liquibase.ext</groupId>
              <artifactId>liquibase-hibernate5</artifactId>
              <version>${liquibase.hibernate.version}</version>
            </dependency>

            <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-data-jpa</artifactId>
              <version>2.2.5.RELEASE</version>
            </dependency>
          </dependencies>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

Когда я запускаю mvn liquibase:diff, я получил No changesets to add., даже если у меня есть несколько сущностей, и моя БД пуста. DB - это Postgress.

Я думаю, что проблема связана с referenceUrl:

<referenceUrl>hibernate:spring:com.example.start.project.entity?dialect=org.hibernate.dialect.PostgreSQL95Dialect</referenceUrl>

, и что liquibase не может найти мои объекты.

Объекты размещены в разных Модуль maven, чем откуда я работаю mvn liquibase:diff, но этот модуль имеет ссылку на него.

Кто-нибудь видит, что я делаю неправильно. Спасибо заранее.

...