参考链接
感谢大佬们的分享
第一步 添加mongo依赖
版本号统一在父pom管理
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<scope>provided</scope>
</dependency>
多数据源需要使用配置注入 导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
这里主要是使用 @ConfigurationProperties 这个注解 不然会报错
第二步 配置yml
普通的单数据源的yml配置我们是这样的
data:
mongodb:
uri: mongodb://账号:密码@ip:端口号/数据库名
多数据源我们就要在这里做些文章了
spring:
data:
mongodb:
自定义参数1:
uri: mongodb://账号:密码@ip:端口号/数据库名1
自定义参数2:
uri: mongodb://账号:密码@ip:端口号/数据库名2
这里的自定义参数 我们后面使用
第三步通过工厂模式
装配bean方式将yml我们的配置文件的多数据源进行使用
创建mongo数据源工厂
注意事项 一定不要忘写@data注解 不然运行会报错
@Data
public abstract class AbstractMongoConfig {
private String uri;
/*
* Method that creates MongoDbFactory Common to both of the MongoDb
* connections
*/
public MongoDbFactory mongoDbFactory() throws Exception {
return new SimpleMongoDbFactory(new MongoClientURI(uri));
}
/*
* Factory method to create the MongoTemplate
*/
abstract public MongoTemplate getMongoTemplate() throws Exception;
}
然后创建不同数据库的生成工厂
@Configuration
@ConfigurationProperties(prefix = "spring.data.mongodb.自定义参数1")
@Component
public class CommunityMongoConfig extends AbstractMongoConfig {
@Primary
@Bean(name = "template1")
@Override
public MongoTemplate getMongoTemplate() throws Exception {
return new MongoTemplate(mongoDbFactory());
}
}
这里我们在上面引用yml配置的工厂 下面自定义一个参数 在注入bean的时候进行区分调用的是哪一个数据库
重点 这里还有一个@Primary 注解 多个数据库工厂只有一个这个注解 表示默认使用的数据库
@Configuration
@ConfigurationProperties(prefix = "spring.data.mongodb.自定义参数2")
@Component
public class CommunityMongoConfig extends AbstractMongoConfig {
@Bean(name = "template1")
@Override
public MongoTemplate getMongoTemplate() throws Exception {
return new MongoTemplate(mongoDbFactory());
}
}
**
最后 使用
**
@Service
@Slf4j
public class OrderManageServiceImpl implements IOrderManageSerive {
@Autowired
@Qualifier("template1")
private MongoTemplate mongoTemplate;
@Autowired
@Qualifier("template2")
private MongoTemplate communityMongoTemplate;
}
参数一定要对应起来,假使使用mongoRepository 我现在只研究可以这样使用默认的 多了 没研究出来。。