具有共享域对象的Spring引导MongoDB
我有3个共享同一域对象的服务(3个不同的项目,如ClientService、AggregationService、DataService),其中只有一个(DataService)连接到MongoDB并将数据发送回其他2个服务。 所有这些服务都是基于spring引导的 当我将域对象的单独java文件保存在各自的项目中时,一切正常,因为ClientService和AggregationService中的域对象没有mongodb注释,例如@Document,@Field 但当我将域对象保存在一个公共模块中,这样就不必维护3个副本时,ClientService和AggregationService开始在启动时抛出异常。虽然这些服务确实启动并正确返回响应,但在这些服务启动时也会出现异常。 下面是域对象:具有共享域对象的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 但当我将域对象保存在一个公共模
@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
是从哪里获取的。我认为这是管理包扫描的问题。