@在Cloud Foundry/mongolab上启用MongoDB的OAuditing

@在Cloud Foundry/mongolab上启用MongoDB的OAuditing,mongodb,cloud-foundry,spring-data-mongodb,Mongodb,Cloud Foundry,Spring Data Mongodb,我的设置在本地服务器上运行,但在将其部署到CloudFoundry/mongolab时无法运行 配置非常类似于 我的本地spring配置 @配置 @档案管理员 @启用自动编辑 @EnableMongorPositoriesBasePackages=com.foo.model 公共类SpringMongoConfiguration扩展了AbstractMongoConfiguration{ @凌驾 受保护字符串getDatabaseName{ 返回myDb; } @凌驾 公共Mongo Mong

我的设置在本地服务器上运行,但在将其部署到CloudFoundry/mongolab时无法运行

配置非常类似于

我的本地spring配置

@配置 @档案管理员 @启用自动编辑 @EnableMongorPositoriesBasePackages=com.foo.model 公共类SpringMongoConfiguration扩展了AbstractMongoConfiguration{ @凌驾 受保护字符串getDatabaseName{ 返回myDb; } @凌驾 公共Mongo Mongo抛出异常{ 返回新的MongoClientlocalhost; } @豆子 公共AuditorAware myAuditorProvider{ 返回新的SpringSecurityAuditorAware; } } 这是CloudFoundry设置

@配置 @剖面云 @启用自动编辑 @EnableMongorPositoriesBasePackages=com.foo.model 公共类SpringCloudMongoDBConfiguration扩展了AbstractMongoConfiguration{ 私有云getCloud{ CloudFactory CloudFactory=新的CloudFactory; 返回cloudFactory.getCloud; } @豆子 公共MongoDbFactory MongoDbFactory{ Cloud=getCloud; MongoServiceInfo-serviceInfo=MongoServiceInfo-cloud.getServiceInfocloud.getCloudProperties.getPropertycloud.services.mongo.id; 字符串serviceID=serviceInfo.getId; 返回cloud.getServiceConnectorserviceID,MongoDbFactory.class,null; } @凌驾 受保护字符串getDatabaseName{ Cloud=getCloud; 返回cloud.getCloudProperties.getPropertycloud.services.mongo.id; } @凌驾 公共Mongo Mongo抛出异常{ Cloud=getCloud; 返回新的MongoClientcloud.getCloudProperties.getPropertycloud.services.mongo.connection.host; } @豆子 公共MongoTemplate MongoTemplate{ 返回新的MongoTemplatemongoDbFactory; } @豆子 公共AuditorAware myAuditorProvider{ 返回新的SpringSecurityAuditorAware; } } 当我试图在Cloud Foundry中保存文档时,我遇到的错误是:

输出错误:org.springframework.data.support.IsNewStrategyFactorySupport-意外错误 OUT java.lang.IllegalArgumentException:不支持的实体com.foo.model.project.project!无法确定IsNewsStrategy。 请访问org.springframework.data.mongodb.core.MongoTemplate.insertMongoTemplate.java:739 请访问org.springframework.web.method.support.InvocableHandlerMethod.doInvokeInvocableHandlerMethod.java:221 请访问org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handleAbstractHandlerMethodAdapter.java:85 有什么想法吗?是我的配置文件吗。。? 提前谢谢
Niclas

如果为实体获取的Mongo映射元数据在应用程序启动时未扫描实体,则通常会导致此问题。默认情况下,AbstractMongoConfiguration使用实际配置类的包在启动时查找@Document注释类

异常消息使我假设SpringCloudMongoDBConfiguration不位于com.foo.model.project的任何超级包中。有两种解决方案:

坚持将应用程序配置类放入应用程序根包的便利性。这将导致您的应用程序包被扫描域类、获取的元数据,并按照预期执行新的检测工作。 通过重写MongoConfiguration.getMappingBasePackage,手动将包含域类的包传递给基础结构。
您可能会看到配置在本地环境中工作的原因是,映射元数据可能通过非持久性持久性操作(例如,查询和从那里开始的所有其他操作)获取。

如果为实体获取的Mongo映射元数据未在应用程序中扫描实体,则通常会导致这种情况启动。默认情况下,AbstractMongoConfiguration使用实际配置类的包在启动时查找@Document注释类

异常消息使我假设SpringCloudMongoDBConfiguration不位于com.foo.model.project的任何超级包中。有两种解决方案:

坚持将应用程序配置类放入应用程序根包的便利性。这将导致您的应用程序包被扫描域类、获取的元数据,并按照预期执行新的检测工作。 通过重写MongoConfiguration.getMappingBasePackage,手动将包含域类的包传递给基础结构。
您可能会看到该配置在本地环境中工作的原因是,映射元数据可能通过非持久性持久性操作(例如,查询和从那里开始的所有其他操作)获得。

谢谢Oliver。当我学习AbstractMongoConfiguration课程时,我一定是错过了这一点或是误解了这一点。我把配置文件移到了根目录下,瞧,本地和开发人员都可以使用。干杯!谢谢你,奥利弗。当我学习AbstractMongoConfiguration课程时,我一定是错过了这一点或是误解了这一点。我将配置文件移动到根目录和vo ila它在本地和开发中都有效。干杯!