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.