mongo多數據源教程 mongoTemplate 多數據源

參考鏈接
感謝大佬們的分享

第一步 添加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 我現在只研究可以這樣使用默認的 多了 沒研究出來。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章