Liquibase сбрасывает контрольную сумму и пытается перезапустить набор изменений при переходе на Spring Boot 2 - PullRequest
0 голосов
/ 02 июля 2018

Я перевожу приложение Spring, которое использует Liquibase 3.4.1, в Spring Boot 2.0.3. Я все еще использую Liquibase 3.4.1, хотя я также пробовал 3.6.1.

Я добавил часть конфигурации liquibase в application.yml, но когда я запускаю приложение, столбец MD5SUM в DATABASECHANGELOG устанавливается равным нулю для существующих наборов изменений, и приложение пытается перезапустить наборы изменений и он терпит неудачу.

Я добавил новый набор изменений для тестирования и для него он устанавливает значение MD5SUM , но столбец LIQUIBASE имеет значение UNKNOWN вместо 3.4.1 .

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

Может кто-нибудь помочь мне с некоторыми советами о том, что я мог бы попробовать? Приложение работало нормально с Liquibase 3.4.1 без Spring Boot.

Ниже приведен мой соответствующий файл application.yml:

spring:
  datasource:
    url: ${RDS_URL}
    username: ${RDS_USERNAME}
    password: ${RDS_PASSWORD}
  jpa:
    show-sql: ${HIBERNATE_SHOW_SQL}
    hibernate:
      ddl-auto: none
    properties:
      generate_statistics: true
      globally_quoted_identifiers: true
      format_sql: ${HIBERNATE_FORMAT_SQL}
  liquibase:
    enabled: true
    change-log: classpath:/liquibase/changelog/db.changelog-master.xml
    user: ${RDS_USERNAME}
    password: ${RDS_PASSWORD}
    url: ${RDS_URL}

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

Я не совсем уверен, что я сделал, но теперь все работает нормально. Я изменил значение журнала изменений на change-log: classpath: liquibase / changelog / db.changelog-master.xml , поэтому без / после classpath я использую liquibase версии 3.6 .1 с конфигурациями жидкостной базы с пружинной загрузкой, имеющими пружину спереди.

У меня в мастер-файле импортируются другие файлы. Во время отладки я увидел, что вместо сопоставления импортированного файла с набором изменений run в БД он соответствовал основному файлу и пытался повторно запустить набор изменений, но теперь все в порядке. Weird.

0 голосов
/ 03 июля 2018

Вы можете использовать <preConditions> в ваших скриптах, чтобы ваш скрипт выполнялся, иначе вы можете записать свой набор изменений как MARK_RAN.

Вот пример предварительного условия:

<changeSet ...................>

    <preConditions onFail="MARK_RAN" onError="CONTINUE">
        <not>
            <tableExists tableName="table_name_exemple"/>
        </not>
    </preConditions>

    <createTable tableName="table_name_exemple">

    </createTable>
</changeSet>
0 голосов
/ 02 июля 2018

Spring 1.5.X использует liquibase-core-3.5.3.jar с другой стороны 2.0.X использует liquibase-core-3.5.5.jar.

Существует другой код на жидкой основе. Если вы загляните в LiquibaseProperties.java, то увидите prefix = "spring.liquibase" на liquibase-core-3.5.5.jar и prefix = "liquibase" на liquibase-core-3.5.3.jar.

Теперь подойди к своей точке. Пожалуйста, ознакомьтесь с версией yur liquibase и используйте префикс соответственно. Если вы используете более старую версию, удалите пружину из жидкой основы.

spring:
  datasource:
    url: ${RDS_URL}
    username: ${RDS_USERNAME}
    password: ${RDS_PASSWORD}
  jpa:
   show-sql: ${HIBERNATE_SHOW_SQL}
   hibernate:
     ddl-auto: none
  properties:
     generate_statistics: true
     globally_quoted_identifiers: true
     format_sql: ${HIBERNATE_FORMAT_SQL}

liquibase:
    enabled: true
    change-log: classpath:/liquibase/changelog/db.changelog-master.xml
    user: ${RDS_USERNAME}
    password: ${RDS_PASSWORD}
    url: ${RDS_URL}
...