Spring Data a Liquibase

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.

Napsat komentář