参考链接:(3条消息) mongo多数据源教程 mongoTemplate 多数据源_ccubee的博客-CSDN博客_mongotemplate 多数据源 参考链接:(3条消息) Spring Boot配置MongoDB多数据源_张小凡vip的博客-CSDN博客
1、依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
2、配置,副本集模式连接mongo,readPreference=primary才可以使用事务
spring: data: mongodb: 自定义参数1: uri: mongodb://账号:密码@ip:端口号?slaveOk=true&replicaSet=xxx&write=1&readPreference=primary&connectTimeoutMS=30000&socketTimeoutMS=30000 database: 数据库名1 自定义参数2: uri: mongodb://账号:密码@ip:端口号?slaveOk=true&replicaSet=xxx&write=1&readPreference=primary&connectTimeoutMS=30000&socketTimeoutMS=30000 database: 数据库名2
3、 继承AbstractMongoClientConfiguration ,第一个数据源指定一下 @Primary,第二个数据源同第一个一样,无需指定 @Primary
@Setter
@Getter
@Configuration
@ConfigurationProperties(prefix = "spring.data.mongodb.xxxx")
@Component
public class MongoConfig extends AbstractMongoClientConfiguration {
private String uri;
private String database;
@Override
protected String getDatabaseName() {
return database;
}
@Override
public MongoClient mongoClient() {
return MongoClients.create(uri);
}
@Primary
@Override
@Bean("xxxxMongoDbFactory")
public MongoDatabaseFactory mongoDbFactory() {
return new SimpleMongoClientDatabaseFactory(mongoClient(), getDatabaseName());
}
@Primary
@Bean(name = "xxxxTemplate")
public MongoTemplate getMongoTemplate(@Qualifier("xxxxMongoDbFactory") MongoDatabaseFactory mongoDbFactory,
@Qualifier("xxxxMappingMongoConverter") MappingMongoConverter mappingMongoConverter) throws Exception {
return new MongoTemplate(mongoDbFactory,mappingMongoConverter);
}
@Primary
@Bean("xxxxMongoTransactionManager")
public MongoTransactionManager transactionManager(
@Qualifier("xxxxMongoDbFactory") MongoDatabaseFactory mongoDbFactory){
return new MongoTransactionManager(mongoDbFactory);
}
@Primary
@Bean("xxxxMongoMappingContext")
public MongoMappingContext mongoMappingContext() {
MongoMappingContext mappingContext = new MongoMappingContext();
return mappingContext;
}
@Primary
@Bean("xxxxMappingMongoConverter") //使用自定义的typeMapper去除写入mongodb时的“_class”字段
public MappingMongoConverter mappingMongoConverter(@Qualifier("xxxxMongoDbFactory") MongoDatabaseFactory mongoDbFactory,
@Qualifier("xxxxMongoMappingContext") MongoMappingContext mongoMappingContext) throws Exception {
DefaultDbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDbFactory);
MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mongoMappingContext);
converter.setTypeMapper(new DefaultMongoTypeMapper(null));
return converter;
}
}
4、使用
@Autowired private MongoTemplate mongoTemplate; @Autowired @Qualifier("xxxTemplate") private MongoTemplate xxxMongoTemplate;
第二个数据源指定一下@Qualifier("xxxTemplate"),第一个数据源可以默认,也可指定。
注意,此时事务回滚不能在两个数据源中同时生效