能否使用Mongock向多个数据库写入数据?
可以通过Mongock实现向多个不同数据库写入数据
你的当前代码无法直接区分数据源,因为默认情况下Mongock只会注入对应主数据源的MongockTemplate。要实现多数据源操作,需按以下步骤配置:
1. 配置多数据源及对应MongockTemplate
在配置类中创建分属不同数据库的MongoTemplate,再基于它们生成命名的MongockTemplate:
@Configuration public class MultiMongoConfig { // 对应database1的MongoTemplate @Bean(name = "mongoTemplateDb1") public MongoTemplate mongoTemplateDb1(MongoClient mongoClient) { return new MongoTemplate(mongoClient, "database1"); } // 基于database1的MongoTemplate创建MongockTemplate @Bean(name = "mongockTemplateDb1") public MongockTemplate mongockTemplateDb1(@Qualifier("mongoTemplateDb1") MongoTemplate mongoTemplate) { return new MongockTemplate(mongoTemplate); } // 对应database2的MongoTemplate @Bean(name = "mongoTemplateDb2") public MongoTemplate mongoTemplateDb2(MongoClient mongoClient) { return new MongoTemplate(mongoClient, "database2"); } // 基于database2的MongoTemplate创建MongockTemplate @Bean(name = "mongockTemplateDb2") public MongockTemplate mongockTemplateDb2(@Qualifier("mongoTemplateDb2") MongoTemplate mongoTemplate) { return new MongockTemplate(mongoTemplate); } }
2. 在ChangeSet中指定注入对应MongockTemplate
修改你的变更集方法,通过@Qualifier注解明确指定要注入的命名模板:
@ChangeSet(order = "005", id = "changeWithMongockTemplate1", author = "mongock") public void changeWithMongockTemplate1(@Qualifier("mongockTemplateDb1") MongockTemplate mongockTemplate1) { mongockTemplate1.save("save to database1"); } @ChangeSet(order = "006", id = "changeWithMongockTemplate2", author = "mongock") public void changeWithMongockTemplate2(@Qualifier("mongockTemplateDb2") MongockTemplate mongockTemplate2) { mongockTemplate2.save("save to database2"); }
3. 独立配置变更日志表(可选)
如果两个数据库需要独立记录变更执行历史,需为每个Mongock实例配置不同的lockCollectionName和changeLogCollectionName,避免日志表冲突。
内容的提问来源于stack exchange,提问作者Amit Kumar
相关产品推荐
相关产品推荐

