1

Das ist einfach Code in meinem Frühjahr Boot-Anwendung gestartet:Warum Frühling Boot-Anwendung meldet, dass es zweimal nach Zugabe von Federwolke-Bus Abhängigkeit

package com.maxxton.SpringBootHelloWorld; 

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 

@SpringBootApplication 
public class SpringBootHelloWorldApplication { 

    public static void main(String[] args) { 
    SpringApplication.run(SpringBootHelloWorldApplication.class, args); 
    } 
} 

Und eine ApplicationListener Klasse zu hören ApplicationEvent:

package com.maxxton.SpringBootHelloWorld; 

import org.springframework.context.ApplicationEvent; 
import org.springframework.context.ApplicationListener; 
import org.springframework.stereotype.Component; 

@Component 
public class Test implements ApplicationListener { 

    @Override 
    public void onApplicationEvent(ApplicationEvent event) { 
    if (event.getClass().getSimpleName().equals("ApplicationReadyEvent")) { 
     System.out.println("-------------------------------------"); 
     System.out.println(event.getClass().getSimpleName()); 
     System.out.println("-------------------------------------"); 
    } 
    } 
} 
Jetzt

dependencies { 

    compile("org.springframework.boot:spring-boot-starter-amqp") 
    compile("org.springframework.cloud:spring-cloud-starter-bus-amqp") 

    compile('org.springframework.boot:spring-boot-starter-web') 
    compile('org.springframework.boot:spring-boot-starter') 
    compile("org.springframework.cloud:spring-cloud-starter") 
    compile("org.springframework.cloud:spring-cloud-starter-security") 
    compile("org.springframework.cloud:spring-cloud-starter-eureka") 
    testCompile('org.springframework.boot:spring-boot-starter-test') 
} 

, wenn ich laufe dieses s:

build.gradle enthält diese Abhängigkeiten pring Boot-Anwendung, ich sehe zweimal dieses Protokoll gedruckt:

[main] c.m.S.SpringBootHelloWorldApplication : Started SpringBootHelloWorldApplication in ... seconds (JVM running for ...) 

Normalerweise ist dies nur einmal gedruckt werden einzuloggen, aber es zweimal erhalten gedruckt, wenn ich diese Abhängigkeiten hinzu:

compile("org.springframework.boot:spring-boot-starter-amqp") 
compile("org.springframework.cloud:spring-cloud-starter-bus-amqp") 

Dies ist vollständiges Protokoll:

2017-11-17 15:44:07.372 INFO 5976 --- [   main] o.s.c.support.GenericApplicationContext : Refreshing [email protected]c7c281: startup date [Fri Nov 17 15:44:07 IST 2017]; root of context hierarchy 
------------------------------------- 
ApplicationReadyEvent 
------------------------------------- 
2017-11-17 15:44:07.403 INFO 5976 --- [   main] c.m.S.SpringBootHelloWorldApplication : Started SpringBootHelloWorldApplication in 1.19 seconds (JVM running for 10.231) 
2017-11-17 15:44:09.483 WARN 5976 --- [   main] o.s.amqp.rabbit.core.RabbitAdmin   : Failed to declare exchange: Exchange [name=springCloudBus, type=topic, durable=true, autoDelete=false, internal=false, arguments={}], continuing... org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connect 
2017-11-17 15:44:09.492 INFO 5976 --- [   main] o.s.integration.channel.DirectChannel : Channel 'a-bootiful-client.springCloudBusOutput' has 1 subscriber(s). 
2017-11-17 15:44:09.493 INFO 5976 --- [   main] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 0 
2017-11-17 15:44:09.530 INFO 5976 --- [   main] o.s.i.endpoint.EventDrivenConsumer  : Adding {logging-channel-adapter:_org.springframework.integration.errorLogger} as a subscriber to the 'errorChannel' channel 
2017-11-17 15:44:09.530 INFO 5976 --- [   main] o.s.i.channel.PublishSubscribeChannel : Channel 'a-bootiful-client.errorChannel' has 1 subscriber(s). 
2017-11-17 15:44:09.530 INFO 5976 --- [   main] o.s.i.endpoint.EventDrivenConsumer  : started _org.springframework.integration.errorLogger 
2017-11-17 15:44:09.530 INFO 5976 --- [   main] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 2147482647 
2017-11-17 15:44:09.539 INFO 5976 --- [   main] c.s.b.r.p.RabbitExchangeQueueProvisioner : declaring queue for inbound: springCloudBus.anonymous.kZ1vvxHaRfChKe1TncH-MQ, bound to: springCloudBus 
2017-11-17 15:44:11.562 WARN 5976 --- [   main] o.s.amqp.rabbit.core.RabbitAdmin   : Failed to declare exchange: Exchange [name=springCloudBus, type=topic, durable=true, autoDelete=false, internal=false, arguments={}], continuing... org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connect 
2017-11-17 15:44:13.587 WARN 5976 --- [   main] o.s.amqp.rabbit.core.RabbitAdmin   : Failed to declare queue: Queue [name=springCloudBus.anonymous.kZ1vvxHaRfChKe1TncH-MQ, durable=false, autoDelete=true, exclusive=true, arguments={}], continuing... org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connect 
2017-11-17 15:44:15.611 WARN 5976 --- [   main] o.s.amqp.rabbit.core.RabbitAdmin   : Failed to declare binding: Binding [destination=springCloudBus.anonymous.kZ1vvxHaRfChKe1TncH-MQ, exchange=springCloudBus, routingKey=#], continuing... org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connect 
2017-11-17 15:44:17.662 INFO 5976 --- [   main] o.s.i.a.i.AmqpInboundChannelAdapter  : started inbound.springCloudBus.anonymous.kZ1vvxHaRfChKe1TncH-MQ 
2017-11-17 15:44:17.662 INFO 5976 --- [   main] o.s.i.endpoint.EventDrivenConsumer  : Adding {message-handler:inbound.springCloudBus.default} as a subscriber to the 'bridge.springCloudBus' channel 
2017-11-17 15:44:17.662 INFO 5976 --- [   main] o.s.i.endpoint.EventDrivenConsumer  : started inbound.springCloudBus.default 
2017-11-17 15:44:17.663 INFO 5976 --- [   main] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 2147483647 
2017-11-17 15:44:17.714 INFO 5976 --- [   main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) 
------------------------------------- 
ApplicationReadyEvent 
------------------------------------- 
2017-11-17 15:44:17.717 INFO 5976 --- [   main] c.m.S.SpringBootHelloWorldApplication : Started SpringBootHelloWorldApplication in 20.131 seconds (JVM running for 20.545) 

Wie Sie sehen können, passiert ApplicationReadyEvent zweimal.

Warum passiert das? Gibt es eine Möglichkeit, dies zu vermeiden?

können Sie hier vollständigen Code finden: https://github.com/SanketKD/SpringBootTests.git

+0

nie Frühling Wolke Bus verwendet, aber es sieht so aus, als könnte es das verursachen. Laut [docs] (http://cloud.spring.io/spring-cloud-static/spring-cloud-bus/1.3.1.RELEASE/) können Sie die Verfolgung aktivieren, so dass Sie nachsehen und überprüfen können wenn da etwas nicht stimmt. Eine verrückte Idee könnte sein, dass die Anwendung ihre eigenen Statusänderungen abhört und daher ihr eigenes Ereignis konsumiert und die Ausgabe dupliziert ... –

Antwort

2

spring-cloud-bus verwendet spring-cloud-stream, der den Ordner in einen separaten Start-Kind-Anwendungskontext stellt.

Sie sollten Ihre Veranstaltung Zuhörer bewusst den Anwendungskontext machen es aktiv ist. Sie könnten auch Generika können in den Ereignistyp Sie daran interessiert sind wählen ...

@Component 
public class Test implements ApplicationListener<ApplicationReadyEvent>, 
          ApplicationContextAware { 

    private ApplicationContext applicationContext; 

    @Override 
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 
     this.applicationContext = applicationContext; 
    } 

    @Override 
    public void onApplicationEvent(ApplicationReadyEvent event) { 
     if (event.getApplicationContext().equals(this.applicationContext)) { 
      System.out.println("-------------------------------------"); 
      System.out.println(event.getClass().getSimpleName()); 
      System.out.println("-------------------------------------"); 
     } 
    } 

} 
+0

Also, Sie sagen, @ Gary-Russell Wenn wir Feder-Cloud-Bus-Abhängigkeit verwenden, wird "Started SpringBootHelloWorldApplication in ..." doppelt geloggt, Weil Spring-Cloud-Bus Spring-Cloud-Stream verwendet legt den Ordner in ein separates Start-Kind. – SanketKD

+0

Es wird nur zweimal protokolliert, wenn Sie meinen Rat nicht befolgen und Ihren Listener darauf aufmerksam machen, welcher Anwendungskontext int deklariert ist. –

+0

Ich habe Änderungen nach Ihren Vorschlägen gemacht, jetzt Listener bewusst, druckt nur einmal, aber "SpringBootHelloWorldApplication in ..." wird immer noch doppelt geloggt. – SanketKD

0

Sind u mehrere Bindemittel RabbitMQ Konfiguration in Ihrer application.yml/.xml verwenden?

Wenn es ein Ja ist, können Sie versuchen, RabbitAutoConfiguration auszuschließen.

+0

Nein, ich verwende nicht mehrere Ordner. – SanketKD

Verwandte Themen