Ich baue einen Webservice, der zwischen zwei Eigenschaftensätzen wechseln muss, abhängig von der URL der Anfrage. Ich bin mir nicht sicher, welches die beste Methode ist, dies zu handhaben.
Ich habe eine Spring-Boot-App mit einer Yaml-Eigenschaftendatei. In der Eigenschaftendatei sieht die Struktur ungefähr so aus:
%Vor% Sowohl optionA
als auch optionB
haben ziemlich alle die gleichen Eigenschaften, nur unterschiedliche Werte.
So kommt eine Anfrage herein, ich überprüfe die Anfrage und entscheide, ob ich OptionA oder OptionB brauche.
Ich habe versucht, @ConfigurationProperties
dazu zu bringen, das zu verarbeiten, aber die Eigenschaften werden beim Start initialisiert, so dass sie nicht dynamisch sein können. Eine weitere Möglichkeit besteht darin, dass ich zwei Konfigurationsklassen habe, eine für jede Option, aber dann wird mein Code voll mit Checks, um zwischen den beiden Klassen zu wechseln, und die Klassen sind ziemlich identisch, auch nicht wirklich nett.
Alle Best Practices oder Empfehlungen, wie Sie das am besten handhaben können, wären willkommen, Prost!
Wenn Sie nicht zu viele Optionen haben, würde ich diesen Weg gehen: (nur mit kleinerer Konfiguration Beispiel gemacht)
options.yml:
%Vor%Ich habe eine Option-Klasse für die Erweiterung erstellt:
%Vor% Und zwei Optionsklassen, in denen die @ConfigurationProperties
festgelegt werden: (Vorläufig sind diese Klassen leer, aber Sie haben die Möglichkeit, für jede andere Option genauer zu sein)
Für die Entscheidung der verschiedenen Optionen habe ich ein interface
:
Und in der Implementierung injiziere ich beide Optionen und die Implementierung der Geschäftslogik: (auf einfache Weise)
%Vor% Und am Ende ruft Ihr Controller einfach die Klasse OptionServiceImpl
an und entscheidet, welche Option verwendet werden soll:
Ausgabe von System.out.println:
%Vor%Ihre Geschäftslogik, die entscheidet, welche Option verwendet werden soll, ist also kein if - else-Konstrukt. Sie können die Regeln für die Entscheidung in der Schnittstelle und deren Implementierung erstellen. Ich denke, Sie können mehr Regeln für mehr Controller erstellen.
Sie können Schlüsselwertpaare in application.properties definieren.
wo der Schlüssel der Name und der Wert des Webdienstes ist, ist die Option (Liste der Eigenschaften)
Verwenden Sie @ConfigurationProperties
%Vor%basierend auf Web-Service erhalten die erforderlichen Werte mit dem Schlüssel.
Ändere dein Yml in:
%Vor%Add Config-Klasse:
%Vor%Benutze es:
%Vor%Ergebnis:
%Vor%Tags und Links java spring spring-boot