使用 MongodB 的 Spring Boot 但连接到 Azure Cosmos
Posted
技术标签:
【中文标题】使用 MongodB 的 Spring Boot 但连接到 Azure Cosmos【英文标题】:Spring boot with MongodB but connection to Azure Cosmos 【发布时间】:2018-06-10 03:54:12 【问题描述】:我有 spring Mongodb 应用程序,我想把它带到 Azure。所以,我决定使用 Cosmos db。我对我的 application.properties 文件进行了以下更改 spring.data.mongodb.uri = mongodb://[用户名]:[密码]@[dbname].documents.azure.com:10255/?ssl=true spring.data.mongodb.database=dbname
我收到以下异常: ActivityId:25611363-0000-0000-0000-000000000000,请求URI:/应用/ bbbd93b0-83ee-44a2-9015-ca7226457764 /服务/ 63c75889-e342-42b3-81b0-4851cae426d7 /分区/ 89ba02e8-b034-4b75-b8a0- 57194d79f785/replicas/131587440168033880p,RequestStats:,SDK:Microsoft.Azure.Documents.Common/1.19.121.4' 在服务器 dz5prdddc02-docdb-1.documents.azure.com:10255 上。完整的响应是 "_t" : "OKMongoResponse", "ok" : 0, "code" : 2, "errmsg" : "Message: \"Errors\":[\"Too many 'included' paths (106 ) 在政策中指定。最多允许 100 个。\"]\r\nActivityId:25611363-0000-0000-0000-000000000000,请求 URI:/apps/bbbd93b0-83ee-44a2-9015-ca7226457764/services/63c75889-e342-42b3- 81b0-4851cae426d7/partitions/89ba02e8-b034-4b75-b8a0-57194d79f785/replicas/131587440168033880p,RequestStats:,SDK:Microsoft.Azure.Documents.Common/1.19.121.4”,“$err”:“消息:\”错误\":[\"策略中指定的“包含”路径 (106) 过多。最多允许 100 个。\"]\r\nActivityId:25611363-0000-0000-0000-000000000000,请求 URI:/apps/bbbd93b0-83ee-44a2-9015-ca7226457764/services/63c75889-e342-42b3- 81b0-4851cae426d7/partitions/89ba02e8-b034-4b75-b8a0-57194d79f785/replicas/131587440168033880p,RequestStats:,SDK:Microsoft.Azure.Documents.Common/1.19.121.4" 在 org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:107) ~[spring-data-mongodb-1.10.9.RELEASE.jar:na] 在 org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator.createIndex(MongoPersistentEntityIndexCreator.java:162) ~[spring-data-mongodb-1.10.9.RELEASE.jar:na] 在 org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator.checkForAndCreateIndexes(MongoPersistentEntityIndexCreator.java:133) ~[spring-data-mongodb-1.10.9.RELEASE.jar:na] 在 org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator.checkForIndexes(MongoPersistentEntityIndexCreator.java:125) ~[spring-data-mongodb-1.10.9.RELEASE.jar:na] 在 org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator.(MongoPersistentEntityIndexCreator.java:91) ~[spring-data-mongodb-1.10.9.RELEASE.jar:na] 在 org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator.(MongoPersistentEntityIndexCreator.java:68) ~[spring-data-mongodb-1.10.9.RELEASE.jar:na] 在 org.springframework.data.mongodb.core.MongoTemplate.(MongoTemplate.java:233) ~[spring-data-mongodb-1.10.9.RELEASE.jar:na] 在 org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration.mongoTemplate(MongoDataAutoConfiguration.java:101) ~[spring-boot-autoconfigure-1.5.9.RELEASE.jar:1.5.9.RELEASE] 在 org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration$$EnhancerBySpringCGLIB$$7c4704f8.CGLIB$mongoTemplate$1() ~[spring-boot-autoconfigure-1.5.9.RELEASE.jar:1.5.9.RELEASE] 在 org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration$$EnhancerBySpringCGLIB$$7c4704f8$$FastClassBySpringCGLIB$$e0a4d3c3.invoke() ~[spring-boot-autoconfigure-1.5.9.RELEASE.jar:1.5.9.发布] 在 org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE] 在 org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:358) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE] 在 org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration$$EnhancerBySpringCGLIB$$7c4704f8.mongoTemplate() ~[spring-boot-autoconfigure-1.5.9.RELEASE.jar:1.5.9.RELEASE] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_151] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_151] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_151] 在 java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_151] 在 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] ...省略了47个常用框架 原因:com.mongodb.MongoCommandException:命令失败,错误 2:'消息:“错误”:[“策略中指定的“包含”路径 (106) 太多。最多允许 100 个。”] ActivityId:25611363-0000-0000-0000-000000000000,请求URI:/应用/ bbbd93b0-83ee-44a2-9015-ca7226457764 /服务/ 63c75889-e342-42b3-81b0-4851cae426d7 /分区/ 89ba02e8-b034-4b75-b8a0- 57194d79f785/replicas/131587440168033880p,RequestStats:,SDK:Microsoft.Azure.Documents.Common/1.19.121.4' 在服务器 dz5prdddc02-docdb-1.documents.azure.com:10255 上。完整的响应是 "_t" : "OKMongoResponse", "ok" : 0, "code" : 2, "errmsg" : "Message: \"Errors\":[\"Too many 'included' paths (106 ) 在政策中指定。最多允许 100 个。\"]\r\nActivityId:25611363-0000-0000-0000-000000000000,请求 URI:/apps/bbbd93b0-83ee-44a2-9015-ca7226457764/services/63c75889-e342-42b3- 81b0-4851cae426d7/partitions/89ba02e8-b034-4b75-b8a0-57194d79f785/replicas/131587440168033880p,RequestStats:,SDK:Microsoft.Azure.Documents.Common/1.19.121.4”,“$err”:“消息:\”错误\":[\"策略中指定的“包含”路径 (106) 过多。最多允许 100 个。\"]\r\nActivityId:25611363-0000-0000-0000-000000000000,请求 URI:/apps/bbbd93b0-83ee-44a2-9015-ca7226457764/services/63c75889-e342-42b3- 81b0-4851cae426d7/partitions/89ba02e8-b034-4b75-b8a0-57194d79f785/replicas/131587440168033880p,RequestStats:,SDK:Microsoft.Azure.Documents.Common/1.19.121.4" 在 com.mongodb.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:115) ~[mongodb-driver-core-3.4.3.jar:na] 在 com.mongodb.connection.CommandProtocol.execute(CommandProtocol.java:114) ~[mongodb-driver-core-3.4.3.jar:na] 在 com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:168) ~[mongodb-driver-core-3.4.3.jar:na] 在 com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:289) ~[mongodb-driver-core-3.4.3.jar:na] 在 com.mongodb.connection.DefaultServerConnection.command(DefaultServerConnection.java:176) ~[mongodb-driver-core-3.4.3.jar:na] 在 com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:216) ~[mongodb-driver-core-3.4.3.jar:na] 在 com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:207) ~[mongodb-driver-core-3.4.3.jar:na] 在 com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:146) ~[mongodb-driver-core-3.4.3.jar:na] 在 com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:139) ~[mongodb-driver-core-3.4.3.jar:na] 在 com.mongodb.operation.CreateIndexesOperation$1.call(CreateIndexesOperation.java:150) ~[mongodb-driver-core-3.4.3.jar:na] 在 com.mongodb.operation.CreateIndexesOperation$1.call(CreateIndexesOperation.java:144) ~[mongodb-driver-core-3.4.3.jar:na] 在 com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:426) ~[mongodb-driver-core-3.4.3.jar:na] 在 com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:417) ~[mongodb-driver-core-3.4.3.jar:na] 在 com.mongodb.operation.CreateIndexesOperation.execute(CreateIndexesOperation.java:144) ~[mongodb-driver-core-3.4.3.jar:na] 在 com.mongodb.operation.CreateIndexesOperation.execute(CreateIndexesOperation.java:71) ~[mongodb-driver-core-3.4.3.jar:na] 在 com.mongodb.Mongo.execute(Mongo.java:845) ~[mongodb-driver-3.4.3.jar:na] 在 com.mongodb.Mongo$2.execute(Mongo.java:828) ~[mongodb-driver-3.4.3.jar:na] 在 com.mongodb.DBCollection.createIndex(DBCollection.java:1618) ~[mongodb-driver-3.4.3.jar:na] 在 org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator.createIndex(MongoPersistentEntityIndexCreator.java:142) ~[spring-data-mongodb-1.10.9.RELEASE.jar:na] ...省略了63个常用框架
【问题讨论】:
【参考方案1】:此错误 - “策略中指定的‘包含’路径 (106) 过多。最多允许 100 个。” - 当您在帐户上创建创建的多个索引并超过限制 (100) 时发生。但是,您不必创建大部分索引(如果有的话),因为与 MongoDB 相比,CosmosDB 自动索引文档中的所有路径,不需要显式索引。尝试排除 createIndex/ensureIndex 命令及其 Spring 等效命令,除非它们与创建唯一索引有关(您需要 createIndex 因为我们不知道您希望此约束在哪些字段上)。
【讨论】:
非常感谢,您的解决方案确实帮助了我。另外,我对 Azure Docdb 做了一些错误的引用以上是关于使用 MongodB 的 Spring Boot 但连接到 Azure Cosmos的主要内容,如果未能解决你的问题,请参考以下文章
如何在 spring-boot 中禁用 spring-data-mongodb 自动配置
如何避免使用 Spring-Boot 下载嵌入式 MongoDb