[FIXED] Spring – Mehrere Profile aktiv

Ausgabe

Ich habe im Grunde eine Bean in Spring, die ich nur aktivieren wollte, wenn 2 Profile aktiv sind. Im Grunde wäre es so:

@Profile({"Tomcat", "Linux"})
public class AppConfigMongodbLinux{...}

@Profile({"Tomcat", "WindowsLocal"})
public class AppConfigMongodbWindowsLocal{...}

Ich möchte also, dass wenn ich verwende -Dspring.profiles.active=Tomcat,WindowsLocal, es versuchen würde, nur die zu verwenden AppConfigMongodbWindowsLocal, aber es versucht immer noch, die zu registrieren AppConfigMongodbLinux.

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'appConfigMongodbLinux': Injection of autowired dependencies failed

Ist es möglich, dass die Bean nur registriert wird, wenn beide Profile aktiv sind, oder verwende ich es falsch? 🙂

Vielen Dank!!


Edit: Poste den kompletten Stack.

Der Fehler liegt tatsächlich an einer Eigenschaft, die in den Eigenschaften fehlt, aber wird diese Bean aktiviert? Ich wollte das verstehen, um sicherzustellen, dass ich keine falsche Bohne aktiviere.

org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
    ...
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'appConfigMongodbLinux': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private java.lang.Integer mycompany.config.AppConfigMongodbLinux.mongoPort; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'mongo.port' in string value "${mongo.port}"
    ... 40 more
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private java.lang.Integer mycompany.config.AppConfigMongodbLinux.mongoPort; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'mongo.port' in string value "${mongo.port}"
    ...
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'mongo.port' in string value "${mongo.port}"

Lösung

Wird leider @Profileaktiviert, wenn eines der aufgelisteten Profile aktiv ist. Es gibt ein paar Möglichkeiten, dies zu umgehen.

  • Wenden Sie die allgemeine @Profile("Tomcat")Anmerkung auf eine Konfigurationsklasse der obersten Ebene und dann @Profile("Windows")auf eine verschachtelte Konfigurationsklasse (oder @BeanMethode) an.
  • Wenn Spring Boot als Abhängigkeit akzeptabel ist, verwenden Sie @AllNestedConditionszum Erstellen einer Anmerkung, die das AND anstelle des OR ist.

Es sieht so aus, als wäre das, was Sie zu tun versuchen, sauber zu schreiben, wenn Sie Spring Boot-Autokonfigurationsklassen verwenden würden. Wenn es praktisch ist, die Autokonfiguration in dieser Phase des Lebenszyklus Ihrer Anwendung einzuführen, empfehle ich, darüber nachzudenken.


Beantwortet von –
chrylis -vorsichtigoptimistisch-


Antwort geprüft von –
Dawn Plyler (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like