【问题标题】:Maven build fails if mongodb server is not present with spring boot 2?如果 Spring Boot 2 中不存在 mongodb 服务器,Maven 构建会失败?
【发布时间】:2018-12-29 18:17:55
【问题描述】:

我正在学习java和Spring boot 2

所以我的问题是:

2018-07-09 11:40:24.816  INFO 20196 --- [localhost:27017] org.mongodb.driver.cluster: Exception in monitor thread while connecting to server localhost:27017

com.mongodb.MongoSocketOpenException: Exception opening socket at com.mongodb.connection.SocketStream.open(SocketStream.java:62) ~[mongo-java-driver-3.6.4.jar:na]
at com.mongodb.connection.InternalStreamConnection.open (InternalStreamConnection.java:126) ~[mongo-java-driver-3.6.4.jar:na]
at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run (DefaultServerMonitor.java:114) ~[mongo-java-driver-3.6.4.jar:na]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_171] Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_171]
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_171]
at java.net.AbstractPlainSocketImpl.connectToAddress (AbstractPlainSocketImpl.java:206) ~[na:1.8.0_171]
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_171]
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_171]
at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_171]
at com.mongodb.connection.SocketStreamHelper.initialize (SocketStreamHelper.java:59) ~[mongo-java-driver-3.6.4.jar:na]
at com.mongodb.connection.SocketStream.open(SocketStream.java:57) ~[mongo-java-driver-3.6.4.jar:na]
... 3 common frames omitted

2018-07-09 11:40:25.164  INFO 20196 --- [           main] org.mongodb.driver.cluster: Cluster description not yet available. Waiting for 30000 ms before timing out

因此,当 Spring Boot 2 是 Maven 构建应用程序时,由于缺少 MongoDB 服务器并尝试连接 3 次超时 30000 毫秒,它卡住了,然后卡住了......

所以我想初始化这个连接,在完成 Maven 构建之后,从运行时使用外部配置参数,然后使用 @shedules 监控检查 MongoDB 是否处于活动状态,如果丢失则重新连接。

我发现的 SQL 不包括 topic 的自动配置,但我不知道哪个文件是从 link 配置 MongoDB。也许我必须像@PostConstruct @bean conf文件一样配置它? (如果它存在并且有可能做这个机会,请给我举个例子)

提前谢谢你!

现在我以 db 路由器为例:

@SpringBootApplication(exclude = 
{org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration.class
,org.springframework.boot.autoconfigure.data.mongo 
.MongoDataAutoConfiguration.class})
public class Application { 

从自动配置中排除 2 个文件,为设置我的属性编写了一些类,但我仍然不知道如何延迟连接!

【问题讨论】:

  • 与其过度设计解决方案,为什么不添加一个启用/禁用 mongo 自动配置的配置文件。当 mongo 存在时它是否处于活动状态?
  • 格式化了 Java 堆栈部分和几个拼写错误。
  • 也许你是对的,我尝试按照你的方式进行研究。
  • 我尝试了这种方式,但是mongorepository想要创建独立于应用程序是否连接的bean还有另一个问题。然后将连接异常的嵌套异常的所有应用程序原因粉碎到mongo db

标签: java mongodb maven spring-boot spring-mongodb


【解决方案1】:

在构建项目时跳过 junit 测试。

使用-Dmaven.test.skip=true 跳过测试

在eclipse->Project->Run As->运行配置->Maven build->勾选Skip Tests

【讨论】:

  • 我知道为什么我的构建卡住了,我在异常下面写了这个。我的目的是忽略它并构建我的应用程序,然后在运行时检查实用程序类是否我的 mongo db 还活着。
  • 我认为您正在运行 Junit,它会在创建构建时尝试连接 Mongo DB。在构建时跳过测试。更新答案
【解决方案2】:

由于您使用的是 spring boot,它应该处理所需的版本,或者您是否自己在 pom 中添加了驱动程序的条目。

  1. 尝试 maven clean 并强制更新快照。
  2. mongo-java-driver-3.6.4.jar 要么不兼容,要么您使用的 ide 没有选择它。查表mongo-db-compatibilty

【讨论】:

  • 我知道为什么我的构建卡住了,我在异常下面写了这个。我的目的是忽略它并构建我的应用程序,然后在运行时检查实用程序类是否我的 mongo db 还活着。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-30
  • 2021-10-09
  • 1970-01-01
  • 2018-03-22
  • 2014-12-04
  • 2019-07-22
相关资源
最近更新 更多