參考鏈接
感謝大佬們的分享
第一步 添加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 我現在只研究可以這樣使用默認的 多了 沒研究出來。。