Liquibase: diff всегда генерирует индексы
Я использую spring-boot с liquibase-maven-plugin для генерации изменений в базе данных в соответствии с моими классами, но команда "mvn compile liquibase: diff" всегда генерирует удаления и включения индексов и внешних ключей, даже если база данных обновлена и не имеет изменений в классах (и, следовательно, не должно иметь никаких изменений в базе данных).
У кого-нибудь есть идеи, если это правильно или как этого избежать? Я хочу, чтобы только новые изменения в базе данных генерировались в наборах изменений Проекта.
1 ответ
Прежде всего, я думаю, что вам не хватает плагин liquibase-hibernate4 maven.
Из проекта Readme.md
:
Это расширение позволяет вам использовать вашу конфигурацию Hibernate в качестве базы данных сравнения для diff, diffChangeLog и generateChangeLog в Liquibase.
Что на самом деле означает, что вы можете использовать его для сравнения реальной базы данных с вашими java-сущностями, чтобы генерировать новые журналы изменений.
Как подсказывает вики проекта, важно помнить, что вам нужно взглянуть на новые журналы изменений и изменить их вручную, если что-то не так.
Я также рекомендую вам прочитать эту статью от Baeldung, которая объясняет, что:
Ваш pom.xml
должен выглядеть так:
...
<dependencies>
...
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.4.1</version>
</dependency>
...
</dependencies>
...
<plugins>
...
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.4.1</version>
<configuration>
<propertyFile>src/main/resources/liquibase.properties</propertyFile>
</configuration>
<dependencies>
<dependency>
<groupId>org.liquibase.ext</groupId>
<artifactId>liquibase-hibernate4</artifactId>
<version>3.5</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.7.3.RELEASE</version>
</dependency>
</dependencies>
</plugin>
...
</plugins>
...
И ваш src/main/resources/liquibase.properties
:
url=jdbc:mysql://localhost:3306/your_db
username=your_user
password=your_pw
driver=com.mysql.jdbc.Driver #orYourDriver
outputChangeLogFile=src/main/resources/liquibase-outputChangeLog.xml
hibernate:spring:your.model.package?dialect=org.hibernate.dialect.MySQLDialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
Я не уверен, какое постоянное хранилище вы используете, но обязательно используйте правильные драйверы и URL источника данных.
После полной настройки вы сможете запустить mvn liquibase:diffChangeLog
генерировать новые журналы изменений.