Wie werden zwei Eigenschaftensätze zur Laufzeit verwaltet?

8

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!

    
pquill 05.01.2017, 15:22
quelle

3 Antworten

1

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)

%Vor%

Für die Entscheidung der verschiedenen Optionen habe ich ein interface :

erstellt %Vor%

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:

%Vor%

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.

    
Patrick 05.01.2017, 16:04
quelle
0

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.

    
Barath 05.01.2017 15:50
quelle
0

Ändere dein Yml in:

%Vor%

Add Config-Klasse:

%Vor%

Benutze es:

%Vor%

Ergebnis:

%Vor%     
Walery Strauch 06.01.2017 00:06
quelle

Tags und Links