Liquibase Gradle Plugin удаляет таблицу последовательности гибернации в созданном журнале изменений - PullRequest
1 голос
/ 23 апреля 2020

Я пытаюсь настроить плагин жидкой основы для автоматической смены логов. Мне удалось запустить плагин и получить журнал изменений, но генерируемый журнал содержит несколько проблем.

Основная проблема, с которой я сталкиваюсь, заключается в том, что сгенерированный журнал изменений просит БД удалить таблицу последовательности гибернации.

Соответствующая часть настройки моего файла build.gradle следующая:

dependencies{
    //liquibase
    liquibaseRuntime 'org.liquibase:liquibase-core:3.8.1'
    liquibaseRuntime 'com.vaadin:vaadin-spring-boot-starter'
    liquibaseRuntime 'org.mariadb.jdbc:mariadb-java-client:'+mariaDbClient
    liquibaseRuntime 'mysql:mysql-connector-java:8.0.19'
    liquibaseRuntime 'org.liquibase.ext:liquibase-hibernate5:3.8' 
    liquibaseRuntime 'org.springframework.boot:spring-boot-starter'
    liquibaseRuntime 'org.springframework.boot:spring-boot-starter-security'
    liquibaseRuntime 'org.springframework.boot:spring-boot-starter-data-jpa'
    liquibaseRuntime sourceSets.main.output
}

diff.dependsOn compileJava
diffChangeLog.dependsOn compileJava
generateChangelog.dependsOn compileJava

configurations {
  liquibaseRuntime.extendsFrom runtime
}

liquibase {
  activities {
    diffMain {
      changeLogFile 'src/main/resources/db/liquibase-changelog-gen.xml'
      url 'jdbc:mysql://localhost:3306/ideasapps?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy'
      username 'xxx'
      password 'xxx'
      referenceUrl 'hibernate:spring:a.b.c?dialect=org.hibernate.dialect.MariaDBDialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy'
    }
  }
}

Я использую базу данных mariaDB, которая совместима с драйвером MySQL, который я установил. Мне пришлось использовать разъем MySQL, потому что есть ошибка с разъемом MariaDB и гибернационным жидкостным плагином (CORE-3457). MySQL один работает. Кроме того, мне пришлось указать стратегию именования, потому что стратегия по умолчанию не соответствовала стратегии, используемой пружиной.

Когда я запускаю gradlew diff, я получаю эту странную часть, где он не распознает собственные таблицы liquibase и спящий режим таблица последовательности:

Unexpected Column(s): 
 ideasapps.databasechangelog.AUTHOR
 ideasapps.databasechangelog.COMMENTS
 ideasapps.databasechangelog.CONTEXTS
 ideasapps.databasechangelog.DATEEXECUTED
 ideasapps.databasechangelog.DEPLOYMENT_ID
 ideasapps.databasechangelog.DESCRIPTION
 ideasapps.databasechangelog.EXECTYPE
 ideasapps.databasechangelog.FILENAME
 ideasapps.databasechangelog.ID
 ideasapps.databasechangeloglock.ID
 ideasapps.databasechangelog.LABELS
 ideasapps.databasechangelog.LIQUIBASE
 ideasapps.databasechangeloglock.LOCKED
 ideasapps.databasechangeloglock.LOCKEDBY
 ideasapps.databasechangeloglock.LOCKGRANTED
 ideasapps.databasechangelog.MD5SUM
 ideasapps.databasechangelog.ORDEREXECUTED
 ideasapps.databasechangelog.TAG
 ideasapps.hibernate_sequence.next_val

Также говорится, что последовательность гибернации отсутствует:

Missing Sequence(s): 
 hibernate_sequence

Наконец, когда я запускаю gradlew diffChangelog, я получаю этот набор изменений:

<changeSet author="Orion (generated)" id="1587596582656-67">
    <dropTable tableName="hibernate_sequence"/>
</changeSet>

Это разрывает приложение, поскольку оно удаляет таблицу, которую использует Hibernate для отслеживания текущих индексов. Как правильно настроить этот плагин для правильной генерации журнала изменений?

1 Ответ

0 голосов
/ 23 апреля 2020

Я не выяснил, что вызвало проблему, но мне удалось ее решить, изменив таблицу на последовательность с помощью liquibase:

 <changeSet author="Lucas Carvalhaes" id="xxxxxxx">
    <preConditions onFail="MARK_RAN">
        <tableExists tableName="hibernate_sequence"/>
    </preConditions>

    <dropTable cascadeConstraints="true"
        tableName="hibernate_sequence"/>

    <createSequence
            cycle="false"
            ordered="true"
            sequenceName="hibernate_sequence"
            startValue="34494"/>
</changeSet>

Я просто использовал исходное значение таблицы в качестве начального значения последовательности, чтобы сохранить мою базу данных (так как это небольшое значение, это на самом деле не проблема).

...