Spring Boot Reactive Mongo在启动时挂起

标签 spring mongodb spring-boot spring-data-mongodb

我有一个Spring Boot application,它使用在启动时挂起的 react 性Mongo DB驱动程序。

日志:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.0.1.RELEASE)

2018-05-20 13:45:47.923 DEBUG 26675 --- [           main] s.b.w.r.c.StandardReactiveWebEnvironment : Adding PropertySource 'systemProperties' with lowest search precedence
2018-05-20 13:45:47.924 DEBUG 26675 --- [           main] s.b.w.r.c.StandardReactiveWebEnvironment : Adding PropertySource 'systemEnvironment' with lowest search precedence
2018-05-20 13:45:47.924 DEBUG 26675 --- [           main] s.b.w.r.c.StandardReactiveWebEnvironment : Initialized StandardReactiveWebEnvironment with PropertySources [MapPropertySource {name='systemProperties'}, SystemEnvironmentPropertySource {name='systemEnvironment'}]
2018-05-20 13:45:48.018  INFO 26675 --- [           main] c.a.m.mobsters.MobstersApplication       : Starting MobstersApplication on Adrians-iMac.local with PID 26675 (/Users/adrian/IdeaProjects/MobstersREST/backend/target/classes started by adrian in /Users/adrian/IdeaProjects/MobstersREST)
2018-05-20 13:45:48.018  INFO 26675 --- [           main] c.a.m.mobsters.MobstersApplication       : The following profiles are active: prod
2018-05-20 13:45:48.018 DEBUG 26675 --- [           main] o.s.boot.SpringApplication               : Loading source class com.adrian.mobstersrest.mobsters.MobstersApplication
2018-05-20 13:45:48.092 DEBUG 26675 --- [           main] o.s.b.c.c.ConfigFileApplicationListener  : Activated profiles prod
2018-05-20 13:45:48.093 DEBUG 26675 --- [           main] o.s.b.c.c.ConfigFileApplicationListener  : Loaded config file 'file:/Users/adrian/IdeaProjects/MobstersREST/backend/target/classes/application.yml' (classpath:/application.yml) for profile prod
2018-05-20 13:45:48.093 DEBUG 26675 --- [           main] o.s.b.c.c.ConfigFileApplicationListener  : Loaded config file 'file:/Users/adrian/IdeaProjects/MobstersREST/backend/target/classes/application.yml' (classpath:/application.yml)
2018-05-20 13:45:48.097  INFO 26675 --- [           main] onfigReactiveWebServerApplicationContext : Refreshing org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext@2f9f7dcf: startup date [Sun May 20 13:45:48 EDT 2018]; root of context hierarchy
2018-05-20 13:45:48.098 DEBUG 26675 --- [           main] onfigReactiveWebServerApplicationContext : Bean factory for org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext@2f9f7dcf: org.springframework.beans.factory.support.DefaultListableBeanFactory@2525ff7e: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.event.internalEventListenerProcessor,org.springframework.context.event.internalEventListenerFactory,mobstersApplication]; root of factory hierarchy
2018-05-20 13:45:49.075 DEBUG 26675 --- [           main] o.s.b.a.AutoConfigurationPackages        : @EnableAutoConfiguration was declared on a class in the package 'com.adrian.mobstersrest.mobsters'. Automatic @Repository and @Entity scanning is enabled.
2018-05-20 13:45:49.662 DEBUG 26675 --- [           main] onfigReactiveWebServerApplicationContext : Unable to locate MessageSource with name 'messageSource': using default [org.springframework.context.support.DelegatingMessageSource@619bd14c]
2018-05-20 13:45:49.662 DEBUG 26675 --- [           main] onfigReactiveWebServerApplicationContext : Unable to locate ApplicationEventMulticaster with name 'applicationEventMulticaster': using default [org.springframework.context.event.SimpleApplicationEventMulticaster@323e8306]
2018-05-20 13:45:49.969  INFO 26675 --- [           main] s.w.r.r.m.a.RequestMappingHandlerMapping : Mapped "{[/],methods=[GET]}" onto public java.lang.String com.adrian.mobstersrest.mobsters.api.v1.controller.IndexController.index()
2018-05-20 13:45:49.982  INFO 26675 --- [           main] s.w.r.r.m.a.RequestMappingHandlerMapping : Mapped "{[/api/v1/mobsters/{username}/queue],methods=[POST]}" onto public org.reactivestreams.Publisher<java.lang.Void> com.adrian.mobstersrest.mobsters.api.v1.controller.MobsterController.queue(java.lang.String)
2018-05-20 13:45:49.983  INFO 26675 --- [           main] s.w.r.r.m.a.RequestMappingHandlerMapping : Mapped "{[/api/v1/mobsters],methods=[GET]}" onto public reactor.core.publisher.Flux<com.adrian.mobstersrest.mobsters.domain.Mobster> com.adrian.mobstersrest.mobsters.api.v1.controller.MobsterController.getMobsters()
2018-05-20 13:45:49.983  INFO 26675 --- [           main] s.w.r.r.m.a.RequestMappingHandlerMapping : Mapped "{[/api/v1/mobsters],methods=[POST]}" onto public org.reactivestreams.Publisher<java.lang.Void> com.adrian.mobstersrest.mobsters.api.v1.controller.MobsterController.addMobster(org.reactivestreams.Publisher<com.adrian.mobstersrest.mobsters.domain.Mobster>)
2018-05-20 13:45:50.054  INFO 26675 --- [           main] o.s.w.r.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.reactive.resource.ResourceWebHandler]
2018-05-20 13:45:50.055  INFO 26675 --- [           main] o.s.w.r.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.reactive.resource.ResourceWebHandler]
2018-05-20 13:45:50.503  INFO 26675 --- [           main] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[ds157599.mlab.com:57599], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
2018-05-20 13:45:50.830  INFO 26675 --- [           main] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[ds157599.mlab.com:57599], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
2018-05-20 13:45:51.129  INFO 26675 --- [.mlab.com:57599] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:1, serverValue:133602}] to ds157599.mlab.com:57599
2018-05-20 13:45:51.161  INFO 26675 --- [.mlab.com:57599] org.mongodb.driver.cluster               : Monitor thread successfully connected to server with description ServerDescription{address=ds157599.mlab.com:57599, type=REPLICA_SET_PRIMARY, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 4, 14]}, minWireVersion=0, maxWireVersion=5, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=null, roundTripTimeNanos=30750252, setName='rs-ds157599', canonicalAddress=ds157599-a.mlab.com:57599, hosts=[ds157599-a.mlab.com:57599], passives=[], arbiters=[], primary='ds157599-a.mlab.com:57599', tagSet=TagSet{[]}, electionId=7fffffff0000000000000001, setVersion=1, lastWriteDate=Sun May 20 13:45:45 EDT 2018, lastUpdateTimeNanos=67395842952667}
2018-05-20 13:45:51.198  INFO 26675 --- [.mlab.com:57599] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:2, serverValue:133603}] to ds157599.mlab.com:57599
2018-05-20 13:45:51.239  INFO 26675 --- [.mlab.com:57599] org.mongodb.driver.cluster               : Monitor thread successfully connected to server with description ServerDescription{address=ds157599.mlab.com:57599, type=REPLICA_SET_PRIMARY, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 4, 14]}, minWireVersion=0, maxWireVersion=5, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=null, roundTripTimeNanos=41193458, setName='rs-ds157599', canonicalAddress=ds157599-a.mlab.com:57599, hosts=[ds157599-a.mlab.com:57599], passives=[], arbiters=[], primary='ds157599-a.mlab.com:57599', tagSet=TagSet{[]}, electionId=7fffffff0000000000000001, setVersion=1, lastWriteDate=Sun May 20 13:45:45 EDT 2018, lastUpdateTimeNanos=67395921620843}
2018-05-20 13:45:51.456  INFO 26675 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
2018-05-20 13:45:51.467  INFO 26675 --- [           main] .b.a.e.w.r.WebFluxEndpointHandlerMapping : Mapped "{[/actuator/health],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public org.reactivestreams.Publisher<org.springframework.http.ResponseEntity<java.lang.Object>> org.springframework.boot.actuate.endpoint.web.reactive.AbstractWebFluxEndpointHandlerMapping$ReadOperationHandler.handle(org.springframework.web.server.ServerWebExchange)
2018-05-20 13:45:51.468  INFO 26675 --- [           main] .b.a.e.w.r.WebFluxEndpointHandlerMapping : Mapped "{[/actuator/info],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public org.reactivestreams.Publisher<org.springframework.http.ResponseEntity<java.lang.Object>> org.springframework.boot.actuate.endpoint.web.reactive.AbstractWebFluxEndpointHandlerMapping$ReadOperationHandler.handle(org.springframework.web.server.ServerWebExchange)
2018-05-20 13:45:51.469  INFO 26675 --- [           main] .b.a.e.w.r.WebFluxEndpointHandlerMapping : Mapped "{[/actuator],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto protected java.util.Map<java.lang.String, java.util.Map<java.lang.String, org.springframework.boot.actuate.endpoint.web.Link>> org.springframework.boot.actuate.endpoint.web.reactive.WebFluxEndpointHandlerMapping.links(org.springframework.web.server.ServerWebExchange)
2018-05-20 13:45:51.562  INFO 26675 --- [           main] o.s.w.r.r.m.a.ControllerMethodResolver   : Looking for @ControllerAdvice: org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext@2f9f7dcf: startup date [Sun May 20 13:45:48 EDT 2018]; root of context hierarchy
2018-05-20 13:45:52.538  INFO 26675 --- [ntLoopGroup-2-2] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:3, serverValue:133604}] to ds157599.mlab.com:57599

我的响应式(Reactive)Mongo配置:
package com.adrian.mobstersrest.mobsters.config;

import com.mongodb.ConnectionString;
import com.mongodb.reactivestreams.client.MongoClient;
import com.mongodb.reactivestreams.client.MongoClients;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration;
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
import org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.DependsOn;
import org.springframework.data.mongodb.config.AbstractReactiveMongoConfiguration;
import org.springframework.data.mongodb.core.mapping.event.LoggingEventListener;
import org.springframework.data.mongodb.repository.config.EnableReactiveMongoRepositories;

@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
@EnableReactiveMongoRepositories
@AutoConfigureAfter(EmbeddedMongoAutoConfiguration.class)
public class MongoConfig extends AbstractReactiveMongoConfiguration {

  @Value("${spring.data.mongodb.uri}")
  private String uri;

  @Override
  @Bean
  @DependsOn("embeddedMongoServer")
  public MongoClient reactiveMongoClient() {
    return MongoClients.create(new ConnectionString(uri));
  }

  @Override
  protected String getDatabaseName() {
    return "mobsters";
  }

  @Bean
  public LoggingEventListener mongoEventListener() {
    return new LoggingEventListener();
  }
}

看起来mongo正在根据日志挂起,它只是位于Opened连接中,但从未说过我的应用程序已初始化。

当连接到Docker容器中的Mongo本地实例时,也会发生这种情况。

最佳答案

看来您不应该在此类中使用@SpringBootApplication。
您应该有一个带有main方法的“main”类,该方法已经具有@SpringBootApplication,并且可以在其中添加排除项,您的项目中不应有多个@SpringBootApplication。完成此操作后,只需删除该注释即可
MongoConfig类。

@EnableReactiveMongoRepositories
@AutoConfigureAfter(EmbeddedMongoAutoConfiguration.class)
public class MongoConfig extends AbstractReactiveMongoConfiguration {
编辑:我现在才注意到这是两年多以前发布的...........

关于Spring Boot Reactive Mongo在启动时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50437825/

相关文章:

java - 何时在 Springs @Configuration 中将 proxyBeanMethods 设置为 false?

android - 将 Spring 依赖注入(inject)代码移至 Android

rmongo 和查询

java - 应用程序无法使用类路径启动.../负匹配

Spring Profiles 应用程序属性顺序

java - 是否可以在 Spring 中使用多个 @Qualifier 注解?

java - Spring Integration File Polling 复杂结构 - 子目录

c# - 如何在 MongoDB 中执行 IQueryable 请求?

java - Spring Data、Mongo 和 @TypeAlias : reading not working

java - 如何从Sql中插入和获取数据