gpt4 book ai didi

Spring Mongo Populator 一一

转载 作者:行者123 更新时间:2023-12-02 12:45:24 31 4
gpt4 key购买 nike

我在 Kotlin 上使用 MongoDB 和 Spring,我希望我的应用程序在启动时填充 MongoDB 集合。 (并在每次启动时清洁它)

我的问题是,如果我正在填充的某些数据有问题,我该如何一一填充数据以便容错?

我的代码:

@Configuration
class IndicatorPopulator {
@Value("classpath:indicatorData.json")
private lateinit var data: Resource

@Autowired
private lateinit var indicatorRepository: IndicatorRepository

@Bean
@Autowired
fun repositoryPopulator(objectMapper: ObjectMapper): Jackson2RepositoryPopulatorFactoryBean {
val factory = Jackson2RepositoryPopulatorFactoryBean()
indicatorRepository.deleteAll()
factory.setMapper(objectMapper)
factory.setResources(arrayOf(data))
return factory
}

我正在寻找的是这样的:
@Bean
@Autowired
fun repositoryPopulator(objectMapper: ObjectMapper): Jackson2RepositoryPopulatorFactoryBean {
val factory = Jackson2RepositoryPopulatorFactoryBean()
indicatorRepository.deleteAll()
factory.setMapper(objectMapper)
val arrayOfResources: Array<Resource> = arrayOf(data)
for (resource in arrayOfResources){
try{
factory.setResources(resource)
} catch(e: Exception){
logger.log(e.message)
}

}
return factory
}

关于如何做这样的事情的任何想法都会有所帮助......
提前致谢。

最佳答案

没有对您的询问的内置支持,但您可以通过调整几个类轻松提供。

添加自定义 Jackson 2 阅读器

public class CustomJackson2ResourceReader implements ResourceReader {

private static final Logger logger = LoggerFactory.getLogger(CustomJackson2ResourceReader.class);

private final Jackson2ResourceReader resourceReader = new Jackson2ResourceReader();

@Override
public Object readFrom(Resource resource, ClassLoader classLoader) throws Exception {
Object result;
try {
result = resourceReader.readFrom(resource, classLoader);
} catch(Exception e) {
logger.warn("Can't read from resource", e);
return Collections.EMPTY_LIST;
}
return result;
}
}

添加自定义 Jackson 2 Populator
public class CustomJackson2RepositoryPopulatorFactoryBean extends Jackson2RepositoryPopulatorFactoryBean {
@Override
protected ResourceReader getResourceReader() {
return new CustomJackson2ResourceReader();
}
}

配置
@SpringBootApplication
public class DemoApplication {

public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}

@Bean
public AbstractRepositoryPopulatorFactoryBean repositoryPopulator(ObjectMapper objectMapper, KeyValueRepository keyValueRepository) {
Jackson2RepositoryPopulatorFactoryBean factory = new CustomJackson2RepositoryPopulatorFactoryBean();
keyValueRepository.deleteAll();
factory.setMapper(objectMapper);
factory.setResources(new Resource[]{new ClassPathResource("badclassname.json"), new ClassPathResource("good.json"), new ClassPathResource("malformatted.json")});
return factory;
}

}

我上传了一个工作示例 here

关于Spring Mongo Populator 一一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60711819/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com