Microservices: Ladereihenfolge der Konfiguration

Ich habe kurz ermittelt in welche Reihenfolge die einzelnen Konfigurationen bei enaio Microservices geladen werden:

Mein Beispiel Microservice:

- name: staffmanager
  type: microservice
  profiles: cloud,blue
  instances: 1
  memory: 512M
  port: 12345
  arch: x64
  jdk: jdk17
  path: ${appBase}/staffmanager/staffmanager-app.jar

Unser Microservice wird also mit den Profilen cloud und blue gestartet und heisst staffmanager.

Daraus ergibt sich die folgende Ladereihenfolge:

Ladereihenfolge:

  • Local: application.yml
  • Server: application.yml
  • Server: staffmanager.yml
  • Local: application-blue.yml
  • Local: application-cloud.yml
  • Server: application-blue.yml
  • Server: application-cloud.yml
  • Server: staffmanager-blue.yml
  • Server: staffmanager-cloud.yml

Mit Local: bezeichne ich die Konfigurationen die üblicherweise in der JAR Datei mitgeliefert werden. Mit Server: bezeichne ich die Konfigurationen die im Fall des Service-Maangers sich in dessen config Verzeichnis befinden. Die jeweilige Datei wird natürlich nur ausgelesen, sofern vorhanden.

Es werden also grundsätzlich erst einmal die Konfigurationen ohne Profil geladen. Danach werden die Konfigurationen mit Profil geladen. Wobei jeweils die Konfigurationen mit dem spezifischen App Namen höher priorisiert werden.

Des weiteren können Parameter noch per Environment Parameter und und vmArgs überschrieben werden. Diese übersteuern alle oben genannten Parameter. Hierbei wird zuerst die Environment und anschliessen die vmArgs geladen.

Im Fall des Service Managers werden zum Beispiel im Bereich globalEnvironment vier Parameter übersteuert:

globalEnvironment:
  SPRING_CLOUD_CONFIG_URI: http://127.0.0.1:${server.port}${spring.cloud.config.server.prefix}
  SPRING_CLOUD_CONFIG_USERNAME: ${security.user.name}
  SPRING_CLOUD_CONFIG_PASSWORD: ${security.user.password}
  eureka.instance.preferIpAddress: true

Im Fall der Parameter SPRING_CLOUD_CONFIG_* ist dies auch zwingend nötig, da ansonsten der Config Service nicht in allen Fällen gefunden werden könnte.

vmArgs sind normale Parameter die dem Start Befehl angehängt werden und immer mit -D starten. Im Service Manager können diese über die Option options gesetzt werden.

- name: staffmanager
  type: microservice
  profiles: cloud,blue
  instances: 1
  memory: 512M
  port: 12345
  arch: x64
  jdk: jdk17
  path: ${appBase}/staffmanager/staffmanager-app.jar
  options:
    - -Decmind.test=Blume

Ich hoffe diese Information ist hilfreich.

1 „Gefällt mir“