2016-12-28 15 views
0

RabbitMQを使って簡単なメッセージングを実装しようとする、基本的なSpringブートプロジェクトがあります。spring-boot-starter-amqpの依存関係により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> 

:私は私のpom.xmlファイルに春ブート・スターター・AMQP依存関係を追加して、春のブートアプリケーションを起動すると、私はjava.lang.StackOverflowErrorによって引き起こさjava.lang.reflect.InvocationTargetException例外を取得しますspring-boot-starter-amqpの依存関係をpom.xmlから削除すると、プロジェクトはエラーなく動作します:

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

答えて

1

あなたの問題を解決することは確実ではありませんが、log4Jの依存関係をログに記録するので、矛盾する可能性があります。

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

あなたはプロジェクトの依存関係ツリーを表示することによって、およびorg.springframework.boot:spring-boot-starter-web:jar依存性が引っ張るものを見ることによって、それを確認することができます:あなたはそれを行う場合は、あなたが宣言するとき
は、デフォルトで提供されlogbackを除外することがあります。

[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は、それがクラスパス上にある場合、それはロギング設定のためのLog4j 2をサポートしていることを述べています。依存関係をアセンブルするためにスターターを使用している場合は、Logbackを除外してからlog4j 2を代わりに組み込む必要があります。

だから、唯一のlog4jを使用するには、春・ブート・スターター・ウェブの依存からLogbackを除外することができます:

<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> 

それとものみlogbackを使用するには、あなたはおそらく宣言し、あなたの他の1によって引っ張らにlog4jを除外する必要があります依存関係。
Mavenプロジェクトのmvn dependency:treeを使用して原因を調べます。

いずれにしても、両方を使用しないでください。

1

AMQPをRabbitMQ経由で使用する場合は、すべてのJMS依存関係を削除してください。

また、単純なアプリケーションでは、Spring Integrationは必要ありません。 spring-boot-starter-amqp

関連する問題