Java >> Java Tutorial >  >> Tag >> Spring

Fehler bei Spring-Kontextsuche fehlgeschlagen

In diesem Beitrag werde ich zeigen, wie der Fehler behoben wird, dass die Spring-Kontextsuche fehlgeschlagen ist. Dieses Szenario ähnelt der Verwendung von Spring Boot 2.x oder Spring Boot 1.5. Ich habe kürzlich Spring Boot 2.x verwendet und bin auf einen Fehler wie den folgenden gestoßen:

org.glassfish.jersey.server.spring.SpringComponentProvider: Spring context lookup failed, 
skipping spring component provider initialization.

Warum habe ich diesen Fehler gesehen?

Bevor ich erklären kann, warum ich diesen Fehler gesehen habe. Lassen Sie uns ein paar grundlegende Konzepte darüber erläutern, was  ContextLoaderListner ist ist und was DispatcherServlet ist.

Spring Boot erstellt mehrere Kontexte. Es beginnt mit einem Stammkontext und die restlichen Kontexte sind Kindkontexte. Untergeordnete Kontexte können auf die im Stammkontext definierten Beans zugreifen, aber nicht umgekehrt .

ContextLoaderListener

Wenn Sie die Spring Boot-Anwendung starten, erstellt ContextLoaderListener den Stammanwendungskontext. Spring Boot teilt diesen Stammkontext mit allen anderen untergeordneten Kontexten, die DispatcherServlet sind wird erschaffen. Normalerweise definieren Sie ContextLoaderListener in web.xml wie unten:


<listener>
  <listener-class>
    org.springframework.web.context.ContextLoaderListener
  </listener-class>
</listener>
  
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/spring/applicationContext.xml</param-value>
</context-param>

ServletContext speichert diesen Stammanwendungskontext und man kann WebApplicationContextUtils verwenden um diesen Kontext abzurufen.

DispatcherServlet

DispatcherServlet ist ein HttpServlet dessen Hauptzweck darin besteht, eingehende Webanforderungen zu verarbeiten, die dem konfigurierten URL-Muster entsprechen. Wenn Sie DispatcherServlet definieren In der Spring-Konfiguration verwendet Spring eine konfigurierte Konfigurationsdatei oder erstellt seine eigene Konfigurationsdatei basierend auf Controllern und Ansichten im Code.

DispatcherServlet erstellt einen untergeordneten Anwendungskontext pro Servlet-Eintrag.

Warum Spring Context Lookup fehlgeschlagen ist:

Spring Boot 2.x bietet eine programmgesteuerte Möglichkeit, Ihre Kontexte und Servlets zu konfigurieren. In meinem speziellen Fall habe ich diese programmatische Methode verwendet. Aber ich hatte trotzdem konfiguriert, den Anwendungskontext zu laden, insbesondere den Root-Anwendungskontext.

Um diesen Stammanwendungskontext zu konfigurieren, benötigte ich ContextLoaderListener . Da ich web.xml nicht verwenden wollte , suchte ich nach einem programmatischen Weg. Spring Boot 2.x bietet dies über SpringBootServletInitializer an . Grundsätzlich, wenn wir die Stammanwendungsklasse mit SpringBootServletInitializer erweitern , bindet es Servlet-, Filter- und ServletInitializer-Beans aus dem Anwendungskontext an den Server. Dadurch können wir auch ein WAR-Archiv unserer Anwendung erstellen und in jedem Webcontainer ausführen.

Einmal habe ich SpringBootServletInitializer hinzugefügt In meiner Spring Boot-Hauptanwendungsklasse konnte ich diesen Fehler beheben. Der Code dafür sieht wie folgt aus:


@SpringBootApplication
public class Application extends SpringBootServletInitializer 
{    
    public static void main(String[] args) 
    {
        SpringApplication sa = new SpringApplication(Application.class);
        sa.run(args);
    }
}

Schlussfolgerung

In diesem Beitrag haben wir gezeigt, wie wir den Fehler Spring Context Lookup Failed. beheben können Wenn Sie Feedback zu diesem Beitrag haben, kommentieren Sie es bitte und ich werde Ihnen gerne antworten.

Referenzen

  1. ContextLoaderListener vs. DispatcherServlet
  2. Spring Boot Servlet-Initialisierer
  3. Aktualisieren Sie Spring Boot und fügen Sie Spring Boot Actuator hinzu – Spring Boot Actuator


Java-Tag