2016-12-28 8 views
0

Ich habe ein einfaches Spring Boot-Projekt, wo ich versuche, einfache Messaging mit RabbitMQ zu implementieren. Wenn ich Feder-boot-Starter-AMQP Abhängigkeit in meine pom.xml Datei hinzufügen und Feder-Boot-Anwendung starten, erhalte ich java.lang.reflect.InvocationTargetException Ausnahme verursacht durch java.lang.StackOverflowError:spring-boot-starter-amqp Abhängigkeit verursacht StackOverflowError

Exception in thread "main" java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) 
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) 
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) 
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:58) 
Caused by: java.lang.StackOverflowError 
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:280) 
    at org.apache.log4j.Category.<init>(Category.java:57) 
    at org.apache.log4j.Logger.<init>(Logger.java:37) 
    at org.apache.log4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:43) 
    at org.apache.log4j.LogManager.getLogger(LogManager.java:45) 
    at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:63) 
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:281) 
    at org.apache.log4j.Category.<init>(Category.java:57) 
    at org.apache.log4j.Logger.<init>(Logger.java:37) 
    at org.apache.log4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:43) 
    at org.apache.log4j.LogManager.getLogger(LogManager.java:45) 
    at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:63) 
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:281) 
    at org.apache.log4j.Category.<init>(Category.java:57) 
    at org.apache.log4j.Logger.<init>(Logger.java:37) 

pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>rabbitmq.client</groupId> 
    <artifactId>rabbitmqFstClient</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>rabbitmqFstClient</name> 
    <description>Spring-Boot rabbitmq client</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.2.RELEASE</version> 
     <relativePath/> <!-- lookup parent from repository --> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <java.version>1.8</java.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-thymeleaf</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jms</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.integration</groupId> 
      <artifactId>spring-integration-jms</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-amqp</artifactId> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.apache.activemq/activemq-all --> 
     <dependency> 
      <groupId>org.apache.activemq</groupId> 
      <artifactId>activemq-all</artifactId> 
      <version>5.14.2</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 


</project> 

Wenn ich spring-boot-starter-amqp-Abhängigkeit von pom.xml entferne, funktioniert das Projekt ohne Fehler:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-amqp</artifactId> 
</dependency> 

Antwort

1

Ich bin mir nicht sicher, dass es Ihr Problem lösen wird, aber Sie haben sowieso einen potenziellen Konflikt, da Sie log log je nach Protokoll die Abhängigkeit ziehen.
Wenn Sie es tun, müssen Sie ausschließen logback, die standardmäßig zur Verfügung gestellt wird, wenn Sie Sie erklären:

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 

Sie es durch Anzeigen des Abhängigkeitsbaum von Ihnen org.springframework.boot:spring-boot-starter-web:jar Abhängigkeit zieht überprüfen projizieren und suchen, was die:

[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:1.4.0.RELEASE:compile 
[INFO] | +- org.springframework.boot:spring-boot-starter:jar:1.4.0.RELEASE:compile 
[INFO] | | +- org.springframework.boot:spring-boot-starter-logging:jar:1.4.0.RELEASE:compile 
[INFO] | | | +- ch.qos.logback:logback-classic:jar:1.1.7:compile 
[INFO] | | | | +- ch.qos.logback:logback-core:jar:1.1.7:compile 
[INFO] | | | | \- org.slf4j:slf4j-api:jar:1.7.21:compile 
[INFO] | | | +- org.slf4j:jcl-over-slf4j:jar:1.7.21:compile 
[INFO] | | | +- org.slf4j:jul-to-slf4j:jar:1.7.21:compile 
[INFO] | | | \- org.slf4j:log4j-over-slf4j:jar:1.7.21:compile 
[INFO] | | \- org.yaml:snakeyaml:jar:1.17:runtime 

Spring Boot heißt es, dass es Log4j 2 für die Anmeldung Konfiguration unterstützt, wenn es auf dem classpath ist. Wenn Sie die Starter zum Zusammenstellen von Abhängigkeiten verwenden, müssen Sie Logback ausschließen und stattdessen log4j 2 einbeziehen.

Also nur log4j zu verwenden, Sie Logback vom Frühling-boot-Starter-Web-Abhängigkeit ausschließen könnte:

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
     <exclusions> 
      <exclusion> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-logging</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

Oder nur logback zu verwenden, sollten Sie die log4j ausschließen wahrscheinlich von einem Ihrer anderen erklärt gezogen Abhängigkeiten.
Verwenden Sie: mvn dependency:tree aus dem Maven-Projekt, um den Schuldigen zu kennen.

Aber in jedem Fall sollten Sie nicht beide verwenden.

1

Wenn Sie AMQP über RabbitMQ verwenden möchten, entfernen Sie alle JMS-Abhängigkeiten.

Auch für eine einfache Anwendung benötigen Sie keine Spring Integration. Versuchen Sie Ihre Anwendung nur mit Spring-Boot-Starter-

Verwandte Themen