Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用GrailsMongoDB插件进行大容量插入_Mongodb_Grails - Fatal编程技术网

使用GrailsMongoDB插件进行大容量插入

使用GrailsMongoDB插件进行大容量插入,mongodb,grails,Mongodb,Grails,我正在尝试从GORM-MongoDB插件中执行DBCollection.insert(List,WriteConcern),但我没有找到任何这样做的API。当我们需要插入超过80000条记录时,单个域保存花费的时间太长 我还将所有grails域对象在默认映射中设置为无状态 当我尝试获取MongoTemplate并将其用于批量插入时,代码如下: MongoDatastore datastore = (MongoDatastore)appContext.mongoDatasto

我正在尝试从GORM-MongoDB插件中执行DBCollection.insert(List,WriteConcern),但我没有找到任何这样做的API。当我们需要插入超过80000条记录时,单个域保存花费的时间太长

我还将所有grails域对象在默认映射中设置为无状态

当我尝试获取MongoTemplate并将其用于批量插入时,代码如下:

           MongoDatastore datastore = (MongoDatastore)appContext.mongoDatastore
    MongoTemplate mongoTemplate = datastore.getMongoTemplate(domainClass.gormPersistentEntity)
    mongoTemplate.setWriteConcern(WriteConcern.JOURNAL_SAFE);
    def converter = mongoTemplate.converter
    MongoSession mongoSession = (MongoSession)datastore.currentSession
    def collectionName = mongoSession.getCollectionName(domainClass.gormPersistentEntity)
    def collectionObject = getCollectionForEntity(mongoSession, mongoTemplate,domainClass.gormPersistentEntity )
    mongoTemplate.doInsertBatch(collectionName, dataToInsert, converter)
我得到的错误是:StackoverflowException:

    Caused by: java.lang.StackOverflowError
at java.util.HashMap$EntryIterator.<init>(HashMap.java:932)
at java.util.HashMap$EntryIterator.<init>(HashMap.java:932)
at java.util.HashMap.newEntryIterator(HashMap.java:946)
at java.util.HashMap$EntrySet.iterator(HashMap.java:1050)
at java.util.AbstractMap.hashCode(AbstractMap.java:492)
at org.springframework.util.ObjectUtils.nullSafeHashCode(ObjectUtils.java:336)
at org.springframework.data.util.TypeDiscoverer.hashCode(TypeDiscoverer.java:485)
at org.springframework.data.util.ClassTypeInformation.hashCode(ClassTypeInformation.java:39)
at java.util.HashMap.hash(HashMap.java:351)
at java.util.HashMap.getEntry(HashMap.java:443)
at java.util.HashMap.get(HashMap.java:405)
at org.springframework.data.convert.MappingContextTypeInformationMapper.createAliasFor(MappingContextTypeInformationMapper.java:63)
at org.springframework.data.convert.DefaultTypeMapper.writeType(DefaultTypeMapper.java:177)
at org.springframework.data.convert.DefaultTypeMapper.writeType(DefaultTypeMapper.java:165)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.addCustomTypeKeyIfNecessary(MappingMongoConverter.java:613)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:440)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:379)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:366)
原因:java.lang.StackOverflower错误
位于java.util.HashMap$EntryIterator。(HashMap.java:932)
位于java.util.HashMap$EntryIterator。(HashMap.java:932)
位于java.util.HashMap.NewEntryInterator(HashMap.java:946)
位于java.util.HashMap$EntrySet.iterator(HashMap.java:1050)
位于java.util.AbstractMap.hashCode(AbstractMap.java:492)
位于org.springframework.util.ObjectUtils.nullSafeHashCode(ObjectUtils.java:336)
位于org.springframework.data.util.TypeDiscoverer.hashCode(TypeDiscoverer.java:485)
位于org.springframework.data.util.ClassTypeInformation.hashCode(ClassTypeInformation.java:39)
位于java.util.HashMap.hash(HashMap.java:351)
位于java.util.HashMap.getEntry(HashMap.java:443)
获取(HashMap.java:405)
位于org.springframework.data.convert.MappingContextTypeInformationMapper.createAliasFor(MappingContextTypeInformationMapper.java:63)
位于org.springframework.data.convert.DefaultTypeMapper.writeType(DefaultTypeMapper.java:177)
位于org.springframework.data.convert.DefaultTypeMapper.writeType(DefaultTypeMapper.java:165)
在org.springframework.data.mongodb.core.convert.MappingMongoConverter.addCustomTypeKeyIfNeeded上(MappingMongoConverter.java:613)
位于org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:440)
位于org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:379)
位于org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:366)
因此,现在我尝试在从MongoTemplate为给定的持久实体获取direct DBCollection之后使用它。如果此API是唯一的继续方法,需要一些指导吗?/另外,何时支持GORM中的批量插入API,或者是否有其他解决方法


谢谢。

在DBCollection上使用该方法绝对是一种不错的方法-您可以访问您所追求的批量插入方法。如果gorm支持批量插入,那就太好了。