Konfiguration
Kurzantwort: CDMS wird über Spring-Properties bzw. Umgebungsvariablen
konfiguriert. Die wichtigsten Präfixe sind cdms.database.* (Persistenz und
Mandanten), codamai.cdms.api.* (Formate, Create-Read-Modus),
codamai.cdms.persistence.file.* (Dateiablage) und die cias_*-Variablen
(Keycloak). Der Betriebsmodus cdms.tenant.mode entscheidet über
Mandantentrennung und darf nach der Initialisierung nicht mehr gewechselt werden.
Persistenz und Mandanten – cdms.database.*
Abschnitt betitelt „Persistenz und Mandanten – cdms.database.*“| Property | Typ / Standard | Bedeutung |
|---|---|---|
driver | Pflicht | JDBC-Treiber |
url | Pflicht | JDBC-URL, Platzhalter {tenant} wird ersetzt |
user, password | – | Zugangsdaten |
poolSize | 20 | HikariCP-Poolgröße pro Mandant |
autoUpdate | true | hbm2ddl.auto=update statt validate |
showSql | false | SQL-Ausgabe |
hibernateDialect | "" | Dialekt erzwingen |
autoCreateTenantDatabase | false | fehlende Mandanten-Datenbank anlegen |
factoryCacheSize | 100 | LRU-Größe des EntityManagerFactory-Caches |
factoryCacheIdleSeconds | 1800 | Räumung nach Leerlauf |
tenantCacheTtlSeconds | 3600 | Cachedauer der Tenant-Katalog-Entscheidung |
logRouting | false | Routing-Entscheidungen protokollieren |
migrationMode | HIBERNATE | FLYWAY | Schemaverwaltung |
migrationSystemLocation | classpath:db/migration/system | Flyway-Skripte System-DB |
migrationTenantLocation | classpath:db/migration/tenant | Flyway-Skripte Mandanten-DB |
Betriebsmodus – cdms.tenant.mode
Abschnitt betitelt „Betriebsmodus – cdms.tenant.mode“Ob eine Installation ihre Daten nach Mandant trennt, ist eine systemweite
Angabe und gehört keinem Speicher allein. Sie wird aus cdms.tenant.mode
(CDMS_TENANT_MODE) gelesen — von der Datenbank wie von der Dateiablage.
| Property | Typ / Standard | Bedeutung |
|---|---|---|
cdms.tenant.mode | SINGLE | MULTI (Pflicht) | eine Datenbank und ein Verzeichnisbaum, oder je eines pro Mandant |
Es gibt bewusst keinen Standardwert: ein fehlender Wert verhindert den Start, statt still eine Trennung abzuschalten, die jemand erwartet hat.
Die frühere cdms.database.mode (CDMS_DATABASE_MODE) ist ein veralteter
Alias. Sie wird noch gebunden, damit Bestandsinstallationen starten, aber nur
noch mit cdms.tenant.mode verglichen: Widersprechen sich beide, verweigert die
Anwendung den Start — eine nach Mandant getrennte Datenbank neben einer
ungetrennten Dateiablage ist ein Defekt, keine Konfiguration. Zum Migrieren
CDMS_TENANT_MODE setzen und CDMS_DATABASE_MODE entfernen.
API und Formate – codamai.cdms.api.*
Abschnitt betitelt „API und Formate – codamai.cdms.api.*“| Property | Standard | Bedeutung |
|---|---|---|
formatDateTime | yyyy-MM-dd HH:mm:ss | Parsing im PATCH |
formatDate | yyyy-MM-dd | ” |
formatTime | HH:mm:ss | ” |
createReadMode | STRICT | STRICT oder LENIENT, siehe Transaktionen |
Für Suchfilter und Sortierung gelten eigene Formate:
app.format.datetime, app.format.date, app.format.time (gleiche Standards).
Dateiablage – codamai.cdms.persistence.file.*
Abschnitt betitelt „Dateiablage – codamai.cdms.persistence.file.*“| Property | Bedeutung |
|---|---|
basePath | Wurzelverzeichnis der Blob-Ablage, Pflicht. Fehlt sie, startet die Anwendung nicht. Wird auf abschließenden / normalisiert. |
Im Container ist das typischerweise der Mount-Punkt eines PVC (z. B. /files).
Identität – cias_*
Abschnitt betitelt „Identität – cias_*“| Variable | Bedeutung |
|---|---|
cias_url | Keycloak-Basis-URL |
cias_realm | Realm |
cias_client | Client-ID, deren resource_access-Rollen als Fachrollen gelten |
cias_client_secret | Secret für den Token-Exchange |
mcp_public_base_url | optional: extern sichtbare Basis-URL für den MCP-Endpunkt hinter einem Proxy |
Verhalten und Sonstiges
Abschnitt betitelt „Verhalten und Sonstiges“| Property / Variable | Standard | Bedeutung |
|---|---|---|
STRICT_MODE (Umgebungsvariable) | true | Voreinstellung des Strict Mode pro Request |
codamai.debug | true | Stacktrace in Fehlerantworten aufnehmen |
cdms_hub_query_parallelism | 8 | parallele Worker je Hub-Abfrage über abstrakte Modelle; muss zur Poolgröße passen |
cdms_hub_query_parallelismundcdms.database.poolSizehängen zusammen: jeder Worker belegt ein bis zwei Verbindungen. Ein zu hoher Wert bringt den Pool zum Erliegen.
Beispiel einer application.yml
Abschnitt betitelt „Beispiel einer application.yml“management: endpoints: web: exposure: include: health, info, configprops, metricsspring: threads: virtual: enabled: truecodamai: debug: false cdms: api: createReadMode: STRICT persistence: file: basePath: /files/cdms: database: mode: MULTI driver: com.mysql.cj.jdbc.Driver url: jdbc:mysql://db:3306/{tenant} poolSize: 20 autoCreateTenantDatabase: false migrationMode: HIBERNATEPorts und Endpunkte im Betrieb
Abschnitt betitelt „Ports und Endpunkte im Betrieb“| Zweck | Wert |
|---|---|
| Anwendung | 8080 |
| Management/Actuator | 8081 |
| Liveness | GET :8081/actuator/health/liveness |
| REST-API | /api/rest/** |
| OpenAPI-Gruppe | cdms-public |
| MCP | /api/mcp |