Wie bedingt zu erklären Bohne, wenn mehrere profile sind nicht aktiv?
In meinem Spring-Boot-App, die ich möchte um bedingt zu erklären, eine Bohne, je nach (un -) belasteten Feder-profile.
Die conditon:
Profile "a" NOT loaded
AND
Profile "b" NOT loaded
Meine Lösung bisher (was funktioniert):
@Bean
@ConditionalOnExpression("#{!environment.getProperty('spring.profiles.active').contains('a') && !environment.getProperty('spring.profiles.active').contains('b')}")
public MyBean myBean(){/*...*/}
Gibt es eine elegantere (und kürzeren) Weg zu erklären, diese Bedingung?
Vor allem möchte ich, um loszuwerden, die Verwendung der Spring Expression Language hier.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seit dem Frühjahr 5.1 (aufgenommen im Frühjahr Starten 2.1) ist es möglich, ein Profil-Ausdruck innerhalb Profil string annotation. Also:
In Frühjahr 5.1 (Spring-Boot-2.1) und den oben es ist so einfach wie:
In Frühjahr 4.x und 5.0.x:
Gibt es viele Ansätze für dieses Frühjahr Versionen, jeder von Ihnen hat seine pro 's und con' s. Wenn es nicht viele Kombinationen abzudecken ich persönlich mag @Stanislav Antwort mit der
@Conditional
annotation.Andere Ansätze finden sich in dieser ähnlichen Fragen:
Frühling Profil - Wie UND Bedingung für das hinzufügen von 2 Profilen?
Frühling: Wie zu tun ist UND in den Profilen?
Wenn Sie ein einzelnes Profil könnte man einfach mit einem
@Profile
annotation mit dem not-operator. Es akzeptiert auch mehrere profile, aber mit derOR
Zustand.So, die alternative Lösung ist die Verwendung eines benutzerdefinierten
Bedingung
mit der@Conditional
annotation. Etwa so:Und dann kommentieren Ihre Methode, wie:
Condition
. Ich warte einfach einige Zeit, bevor ich akzeptiere diese Antwort. Vielleicht kommt ein anderer Vorschlag, der ist noch eleganter 😉 (Aber ich denke nicht so)Ich bevorzuge diese Lösung, die ist Ausführlicher, aber immer noch gut für zwei Profilen nur:
Leider habe ich nicht eine kürzere Lösung für Sie, aber wenn es geeignet ist, in Ihrem Fall zu erstellen, die die gleichen Bohnen für jedes Profil können Sie prüfen, die folgenden Ansatz.
a
UNDb
geladen, dann dieMyBean
wird zweimal geladen, in diesem Fall und in der Regel wollen wir nicht dieses Verhalten. Die zweite Sache ist, dass dies keine Lösung für meine Frage. Wenn beide profile werden nicht geladen, dann dieMyBean
sollte nicht erklärt werden, auch.@ConditionalOnMissingBean
wie das ist gefährlich. Um sicher zu sein, es sollte nur verwendet werden, auf auto-Konfigurations-Klassen