fix(backend): Neustart gegen die eigene Datenbank, /info als Lebendprobe

Der Dienst lief einmal und stuerzte danach in einer Schleife: MODE=PostgreSQL
laesst H2 unquotierte Bezeichner klein anlegen, Liquibase sucht seine
Verwaltungstabellen gross, findet nichts, legt sie an — "Table
databasechangelog already exists". Der erste Start ging, jeder weitere nicht.
Gemessen mit dem echten Jar: ohne den Modus laufen beide. Liquibase auf
Kleinschreibung zu konfigurieren half nicht, es korrigiert den Namen selbst
zurueck — deshalb weicht der Modus ganz.

Die Testsuite konnte das nicht finden (jeder Test bekommt eine frische
In-Memory-DB), und der Regressionstest dafuer hat zweimal gelogen: erst reichte
er die URL als Default-Property herein, die die application.yaml ueberstimmt;
dann als Argument, aber damit pruefte er eine URL, die er sich selbst
ausgedacht hatte. Jetzt hat die URL einen Regler (werkbaum.data-dir), der Test
ueberschreibt nur den, und die Gegenprobe faellt.

Dieselbe Sorte Fehler eine Ebene hoeher: Die Testkonfiguration hiess
application.yaml und verdeckte damit die Hauptkonfiguration vollstaendig. Sie
ist jetzt eine Profil-Ueberlagerung.

Dazu GET /api/v1/info mit Name, Version und Bauzeitpunkt. Die Lebendprobe
erwartete bisher eine 404 von einem Dokument, das es nicht gibt — ein
erwarteter Fehler ist eine schlechte Zusicherung, dieselbe 404 liefert auch ein
falsch konfigurierter Proxy.

138 Backend-Tests. Gegenprobe: MODE=PostgreSQL zurueck -> genau der
Neustart-Test faellt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-08-26 19:02:51 +02:00
co-authored by Claude Opus 5
parent 78901793f0
commit dea904814b
17 changed files with 436 additions and 52 deletions
+7 -3
View File
@@ -3,9 +3,13 @@ spring:
name: editor-backend
datasource:
# H2 im File-Modus mit PostgreSQL-Kompatibilitaet.
# Spaeterer Umstieg auf echtes PostgreSQL = im Wesentlichen nur diese URL aendern.
url: jdbc:h2:file:./data/editor;MODE=PostgreSQL;DATABASE_TO_LOWER=TRUE;DEFAULT_NULL_ORDERING=HIGH
# H2 im File-Modus. Bewusst OHNE MODE=PostgreSQL, obwohl das naheliegt:
# In dem Modus legt H2 unquotierte Bezeichner klein an, Liquibase sucht
# seine Verwaltungstabellen aber gross - findet nichts, legt sie an, und H2
# antwortet "Table databasechangelog already exists". Folge: Der erste
# Start geht, JEDER WEITERE stuerzt ab. Gemessen und in D77 begruendet;
# der Umstieg auf echtes PostgreSQL bleibt eine Frage von URL und Treiber.
url: jdbc:h2:file:${werkbaum.data-dir:./data}/editor;DEFAULT_NULL_ORDERING=HIGH
username: sa
password: ""
driver-class-name: org.h2.Driver
@@ -313,6 +313,25 @@ paths:
"404":
$ref: "#/components/responses/NotFound"
/info:
get:
tags: [Documents]
operationId: getInfo
summary: Name und Version des Dienstes
description: >
Offen und ohne Nebenwirkung - gedacht als Lebendprobe fuer Deploy und
Ueberwachung. Ohne diesen Endpunkt bliebe dafuer nur eine Anfrage nach
einem Dokument, das es nicht gibt, und man muesste auf eine 404 hoffen:
Ein erwarteter Fehler ist eine schlechte Zusicherung, weil ihn auch ein
falsch konfigurierter Proxy liefert.
responses:
"200":
description: Der Dienst laeuft
content:
application/json:
schema:
$ref: "#/components/schemas/ServiceInfo"
components:
responses:
NotFound:
@@ -565,6 +584,19 @@ components:
items:
$ref: "#/components/schemas/ChangeEvent"
ServiceInfo:
type: object
required: [name, version]
properties:
name:
type: string
version:
type: string
builtAt:
type: string
format: date-time
description: Fehlt, wenn ohne Build-Informationen gestartet (z. B. aus der IDE).
ProblemDetail:
type: object
description: Fehlerformat nach RFC 9457 (Problem Details)