Liquibase umožňuje hlídat změny v databázi. Každá změna (blok změn) má svůj vlastní changeset. Liquibase si vytváří dvě vlastní tabulky: databasechangelog, kde jsou uloženy provedené changesety a databasechangeloglock, která slouží pro zamykání (řeší případ přístupu, kdy více vývojářů dělá změny v databázi současně). Může se stát, že pokud Liquibase neskončí korektně a zůstane zámek. Pak je potřeba locked nastavit na false manuálně.
Vytvoření projektu
Pro vytvoření projektu použijeme Spring Initializr (Gradle a Kotlin projekt, Spring Data a PostgreSQL Driver jako další závislosti). Stažený .zip rozbalíme a vytvoříme z něj nový projekt. Do závislostí přidáme liquibase: implementation("org.liquibase:liquibase-core").
Používáme databázi, takže je potřeba nastavit datasource v application.yml (v projektu budete mít pravděpodobně vygenerován application.properties – ten nahraďte application.yml, nebo datasource přidejte do něj):
spring:
datasource:
url: jdbc:postgresql://localhost:5432/spring_liquibase
username: postgres
password: password
driver-class-name: org.postgresql.Driver
Pokud zkusíme nyní projekt spustit, dostaneme následující chybu:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource [org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration$LiquibaseConfiguration.class]: Invocation of init method failed; nested exception is liquibase.exception.ChangeLogParseException: Error parsing classpath:/db/changelog/db.changelog-master.yaml ... Caused by: liquibase.exception.ChangeLogParseException: Error parsing classpath:/db/changelog/db.changelog-master.yaml ... Caused by: java.io.FileNotFoundException: class path resource [db/changelog/db.changelog-master.yaml] cannot be resolved to URL because it does not exist
Chybí nám konfigurace Liquibase. Nejdříve změníme výchozí nastavení umístění souboru a také jeho název. Do application.yml přidáme:
liquibase: enabled: true change-log: classpath:db/changelog.xml
A do resources/db přidáme soubor changelog.xml:
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
</databaseChangeLog>
Takto vypadá nastavení Spring Boot projektu pro Liquibase.