Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.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
Mongodb 如何自动填充mongo存储库?_Mongodb_Spring Data - Fatal编程技术网

Mongodb 如何自动填充mongo存储库?

Mongodb 如何自动填充mongo存储库?,mongodb,spring-data,Mongodb,Spring Data,将Spring数据MongoDB与MongoRepository结合使用。我有这个豆子 @Bean public Jackson2RepositoryPopulatorFactoryBean repositoryPopulator() { Jackson2RepositoryPopulatorFactoryBean factory = new Jackson2RepositoryPopulatorFactoryBean(); try { factory.setR

将Spring数据MongoDB与MongoRepository结合使用。我有这个豆子

@Bean
public Jackson2RepositoryPopulatorFactoryBean repositoryPopulator() {

    Jackson2RepositoryPopulatorFactoryBean factory = new Jackson2RepositoryPopulatorFactoryBean();
    try {
        factory.setResources(resourceResolver.getResources("classpath:static/collections/*.json"));
    } catch (IOException e) {
        log.error("Could not load data", e);
    }
    return factory;
}
这只适用于(在测试运行结束时删除db),但不适用于真正的mongo。如果我让bean保持原样并切换到真实的mongo实例,那么我会填充数据库,但只有第一次运行,如果我重新运行项目(+测试),那么它会失败,因为它已经填充了(获取DuplicateKeyException)

如何仅在存储库为空的情况下进行填充?

@Bean
@Bean
public Jackson2RepositoryPopulatorFactoryBean repositoryPopulator() throws Exception {

    Jackson2RepositoryPopulatorFactoryBean factory = new Jackson2RepositoryPopulatorFactoryBean();
    try {
        Resource[] resources = resourceResolver.getResources("classpath:static/collections/*.json");
        //resources to list so I can add only the necessary resources
        List<Resource> resourcesToFill = new ArrayList<>();
        for (Resource r : resources) {
            String collection = r.getFilename().substring(0, r.getFilename().length() - 5);
            if (!mongoTemplate().collectionExists(collection))
                resourcesToFill.add(r);
        }

        //back to Array...
        resources = new Resource[resourcesToFill.size()];
        for(int i=0; i<resources.length; i++)
            resources[i] = resourcesToFill.get(i);
        factory.setResources(resources); // <-- the reason of this shitty code, why the hell use Array? 
    } catch (IOException e) {
        log.error("Could not load data", e);
    }
    return factory;
}
public Jackson2RepositoryPopulatorFactoryBean repositoryPopulator()引发异常{ Jackson2RepositoryPopulatorFactoryBean工厂=新的Jackson2RepositoryPopulatorFactoryBean(); 试一试{ Resource[]resources=resourcesolver.getResources(“classpath:static/collections/*.json”); //要列出的资源,因此我只能添加必要的资源 List resourcesToFill=新建ArrayList(); for(资源r:资源){ String collection=r.getFilename().substring(0,r.getFilename().length()-5); 如果(!mongoTemplate().collectionExists(collection)) resourcesToFill.add(r); } //返回阵列。。。 resources=新资源[resourcesToFill.size()]; 对于(inti=0;i
@Bean)
public Jackson2RepositoryPopulatorFactoryBean repositoryPopulator()引发异常{
Jackson2RepositoryPopulatorFactoryBean工厂=新的Jackson2RepositoryPopulatorFactoryBean();
试一试{
Resource[]resources=resourcesolver.getResources(“classpath:static/collections/*.json”);
//要列出的资源,因此我只能添加必要的资源
List resourcesToFill=新建ArrayList();
for(资源r:资源){
String collection=r.getFilename().substring(0,r.getFilename().length()-5);
如果(!mongoTemplate().collectionExists(collection))
resourcesToFill.add(r);
}
//返回阵列。。。
resources=新资源[resourcesToFill.size()];

对于(int i=0;i考虑使用数据迁移工具,如。这基本上是MongoDB的Liquibase/Flyway。

考虑使用数据迁移工具,如。这基本上是MongoDB的Liquibase/Flyway