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