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.