具有共享域对象的Spring引导MongoDB

具有共享域对象的Spring引导MongoDB,mongodb,spring-boot,domain-object,Mongodb,Spring Boot,Domain Object,我有3个共享同一域对象的服务(3个不同的项目,如ClientService、AggregationService、DataService),其中只有一个(DataService)连接到MongoDB并将数据发送回其他2个服务。 所有这些服务都是基于spring引导的 当我将域对象的单独java文件保存在各自的项目中时,一切正常,因为ClientService和AggregationService中的域对象没有mongodb注释,例如@Document,@Field 但当我将域对象保存在一个公共模

我有3个共享同一域对象的服务(3个不同的项目,如ClientService、AggregationService、DataService),其中只有一个(DataService)连接到MongoDB并将数据发送回其他2个服务。 所有这些服务都是基于spring引导的

当我将域对象的单独java文件保存在各自的项目中时,一切正常,因为ClientService和AggregationService中的域对象没有mongodb注释,例如@Document,@Field

但当我将域对象保存在一个公共模块中,这样就不必维护3个副本时,ClientService和AggregationService开始在启动时抛出异常。虽然这些服务确实启动并正确返回响应,但在这些服务启动时也会出现异常。 下面是域对象:

@Document(collection = "transformed_categories")
public class Category extends ResourceSupport {

    @Field("id")
    private String customId;
    private String name;
    private String type;
}
例外情况:

2017-02-27 15:10:41.098  INFO 9052 --- [           main] c.c.delivery.CleintServiceApplication     : Started CleintServiceApplication in 3.47 seconds (JVM running for 3.918)
2017-02-27 15:10:41.895  INFO 9052 --- [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:63) ~[mongo-java-driver-3.4.1.jar:na]
at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:115) ~[mongo-java-driver-3.4.1.jar:na]
at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:113) ~[mongo-java-driver-3.4.1.jar:na]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_05]
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) ~[na:1.8.0_05]
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) ~[na:1.8.0_05]
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345) ~[na:1.8.0_05]
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_05]
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_05]
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) ~[na:1.8.0_05]
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_05]
at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_05]
at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:57) ~[mongo-java-driver-3.4.1.jar:na]
at com.mongodb.connection.SocketStream.open(SocketStream.java:58) ~[mongo-java-driver-3.4.1.jar:na]
... 3 common frames omitted
我找到了引起问题的确切地点。 这个问题是由maven依赖性引起的,我将它添加到我的公共库项目中,我打算保留我的所有域对象

    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-mongodb</artifactId>
      <version>1.10.0.RELEASE</version>
    </dependency>

org.springframework.data
spring数据mongodb
1.10.0.1发布

如果删除此依赖项,则不会出现异常。保持跨项目共享的域对象的方法应该是什么?

这是一篇老文章,但需要回答

首先,微服务不应该共享代码。当存在需要跨域发送的域对象时,我们应该使用DTO模式,该模式应该由每个微服务拥有,并且代码不应该跨域共享这是一种推荐做法。

谈到MongoDB异常,这是spring引导应用程序的正常行为。当它在类路径中看到MongoDB而在属性文件中没有配置时,它将在localhost:27017中查找MongoDB实例
因此,如果我们不打算从微服务连接到MongoDB,那么MogoDB驱动程序不应该出现在类路径中。

如果不需要,只需删除它即可。有什么问题吗?此模块中未定义
@文档
批注。是否可以添加一些配置?我想看看这些
mongoscocketopenexception:Exception-opening-socket
是从哪里获取的。我认为这是管理包扫描的问题。