Java >> Java tutorial >  >> Tag >> SQL

Hurtigt tip:Anvender automatisk Liquibase-ændringssæt til HSQL

Dette er et hurtigt tip til brug af Liquibase med HSQL. Du kan bruge førstnævnte værktøj til migreringer af relationelle databaseskemaer og sidstnævnte som in-memory-database på udviklernes maskiner. I dag, med funktionsgrene og projekttilpasning, dvs. ændringer, der er specifikke for en enkelt kunde, kan du være nødt til at lukke databasen ned, genstarte og genanvende migreringerne med jævne mellemrum. Det er selvfølgelig en opgave, der kan automatiseres!

Typisk situation:du arbejder på projektets hovedudviklingsgren, men du ønsker nu at gennemgå en kollegas nye funktion, som er udviklet i en funktionsgren. Du skifter til funktionsgrenen, starter serveren, åbner applikationen og BAM , opstår der en undtagelse på grund af en mislykket skemavalidering. Årsagen:din kollega lavede nogle skemaændringer i funktionsgrenen, som du glemte at anvende.

At forbedre din Liquibase- og HSQL-arbejdsgang er ret simpel:genstart databasen, når skemaet ændres, og anvend migreringerne! Sådan kan du gøre det i bash (undskyld Windows-brugere).

#!/bin/bash
set -e
 
HSQL_PID=""
PROJECT=""
 
if [[ $1 = "customisation" ]]; then
    echo "Using customer specific changelogs..."
    PROJECT="$PROJECT_REPO/customisation"
else
    echo "Using default changelogs..."
    PROJECT="$PROJECT_REPO/database"
fi
 
control_c() {
    kill $HSQL_PID
    exit
}
trap control_c SIGHUP SIGINT SIGTERM 0
 
start() {
    # Start HSQL
    java -cp "$M2_REPO/org/hsqldb/hsqldb/2.2.9/hsqldb-2.2.9.jar" \
         org.hsqldb.Server \
         -database.0 mem:myDB \
         -dbname.0 myDB &
    HSQL_PID=$!
 
    # Schema update
    mvn -f "$PROJECT/pom.xml" liquibase:update -Plocal --no-snapshot-updates
}
 
start
 
while true; do
    if hash inotifywait 2>/dev/null; then
        WATCH_DIR="$PROJECT/src/changelogs"
        echo "Watching $WATCH_DIR for changes..."
 
        # Wait for changelog changes
        inotifywait --recursive $WATCH_DIR \
                    --event modify \
                    --event move \
                    --event create \
                    --event delete
 
        # Just a precaution: wait until the VCS is done changing the branch
        sleep 1
    else
        echo "[Press any key to discard the schema and apply a new one...]"
        read
    fi
 
    # kill HSQL and wait until it is actually shut down
    kill $HSQL_PID
    while kill -0 "$HSQL_PID"; do
        sleep 0.1
    done
 
    start
done

#!/bin/bashset -e HSQL_PID=""PROJECT="" if [[ $1 ="tilpasning" ]]; derefter echo "Bruger kundespecifikke ændringslogs..." PROJECT="$PROJECT_REPO/customisation"else echo "Bruger standardændringslogs..." PROJECT="$PROJECT_REPO/database"fi control_c() { kill $HSQL_PID exit}trap control_c SIGHUP SIGINT SIGTERM 0 start() { # Start HSQL java -cp "$M2_REPO/org/hsqldb/hsqldb/2.2.9/hsqldb-2.2.9.jar" \ org.hsqldb.Server \ -database.0 mem:myDB \ -dbname.0 minDB &HSQL_PID=$! # Skemaopdatering mvn -f "$PROJECT/pom.xml" liquibase:update -Plocal --no-snapshot-updates} starter mens sand; gør hvis hash inotifywait 2>/dev/null; derefter WATCH_DIR="$PROJECT/src/changelogs" echo "Seer $WATCH_DIR for ændringer..." # Vent på ændringer i ændringslog inotifywait --rekursiv $WATCH_DIR \ --event modify \ --event move \ --event create \ - -sletning af begivenhed # Bare en forholdsregel:vent indtil VCS er færdig med at ændre grenens dvale 1 ellers ekko "[Tryk på en vilkårlig tast for at kassere skemaet og anvende et nyt...]" læs fi # dræb HSQL og vent indtil det er faktisk lukke ned kill $HSQL_PID mens kill -0 "$HSQL_PID"; sov 0.1 færdig begyndt færdig

Du skal sikre dig, at du har opsat to miljøvariabler. Der skal være en variabel PROJECT_REPO som peger på rodmappen til dit projekts lager og M2_REPO som peger på Maven-depotet. Du skal muligvis også justere et par stier, f.eks. den version af HSQL, du bruger, samt Maven-projektet og profilnavne. Til sidst bør du installere inotify-værktøjerne (desværre ikke tilgængelig på OS X). inotifywait (en del af inotify-tools) bruges til at se changelog-mappen for ændringer. Projektets Wiki har et afsnit om installation.

Efter opsætning er brugen ret nem:start scriptet og lad det klare resten. Når inotify-værktøjerne ikke er installeret, skal du skifte til din terminal og trykke på “enhver-tasten” for at kassere det nuværende og anvende et nyt skema.


Java tag