多数据源mongodb的使用

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 多数据源mongodb的使用

一、 jar包引入



<!--可以在编译源码的时候生成对应的方法-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.6</version>
    <scope>provided</scope>
</dependency>
<!--mongodb-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<!--解决autoconfigure找不到配置文件的bug-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
<!--spring boot的自动化配置-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-autoconfigure</artifactId>
    <version>2.0.3.RELEASE</version>
</dependency>


二、在文件中添加两条数据源属性



mongodb:
  primary:
    host: localhost
    port: 27017
    database: test
  secondary:
    host: localhost
    port: 27017
    database: data


三、在entity中创建一个配置文件实体类



import lombok.Data;
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
@Data //生成get、set方法等
public class MultipleMongoProperties {
    private MongoProperties primary = new MongoProperties();
    private MongoProperties secondary = new MongoProperties();
}


四、配置第一个数据库



@Configuration
@EnableMongoRepositories(basePackages = "com.tedu.huawei.repository.primary",
        mongoTemplateRef = PrimaryMongoConfig.MONGO_TEMPLATE) //basePackages对应第一个库的repository所在的地址
public class PrimaryMongoConfig {
    protected static final String MONGO_TEMPLATE = "primaryMongoTemplate";
}


五、配置第二个数据库



@Configuration
@EnableMongoRepositories(basePackages = "com.tedu.huawei.repository.secondary",
        mongoTemplateRef = SecondaryMongoConfig.MONGO_TEMPLATE)
public class SecondaryMongoConfig {
    protected static final String MONGO_TEMPLATE = "secondaryMongoTemplate";
}


六、读取对应的配置信息并且构造对应的MongoTemplate



import com.mongodb.MongoClient;
import com.tedu.huawei.entity.MultipleMongoProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
@Configuration
public class MultipleMongoConfig {
    @Autowired
    private MultipleMongoProperties mongoProperties;
    @Bean
    @ConfigurationProperties(prefix = "mongodb")
    public MultipleMongoProperties connectionSettings(){
        return new MultipleMongoProperties();
    }
    @Primary
    @Bean(name = PrimaryMongoConfig.MONGO_TEMPLATE)
    public MongoTemplate primaryMongoTemplate() throws Exception {
        return new MongoTemplate(primaryFactory(this.mongoProperties.getPrimary()));
    }
    @Bean
    @Qualifier(SecondaryMongoConfig.MONGO_TEMPLATE)
    public MongoTemplate secondaryMongoTemplate() throws Exception {
        return new MongoTemplate(secondaryFactory(this.mongoProperties.getSecondary()));
    }
    @Bean
    @Primary
    public MongoDbFactory primaryFactory(MongoProperties mongo) throws Exception {
        return new SimpleMongoDbFactory(new MongoClient(mongo.getHost(), mongo.getPort()),
                mongo.getDatabase());
    }
    @Bean
    public MongoDbFactory secondaryFactory(MongoProperties mongo) throws Exception {
        return new SimpleMongoDbFactory(new MongoClient(mongo.getHost(), mongo.getPort()),
                mongo.getDatabase());
    }
}


七、创建两个库分别对应的repository



640.png

image


八、测试



<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.2.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.2.2</version>
</dependency>


添加配置类


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
    @Bean
    public Docket createRestApi(){
            return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.tedu.huawei.controller")) //基础扫描包路径
            .paths(PathSelectors.any())
            .build();
    }
    private ApiInfo apiInfo(){
            return new ApiInfoBuilder()
            .title("配置swagger")
            .description("配置swagger")
            .termsOfServiceUrl("https://javcfox.github.io") //地址
            .contact("lwx640993") //负责人
            .version("0.1")
            .build();
    }
}


配置好后,访问地址:http://localhost:8080/swagger-ui.html

640.png

测试结果:

640.png


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
8天前
|
NoSQL MongoDB
MongoDB 读写分离——MongoDB 安装
MongoDB 读写分离——MongoDB 安装
17 0
|
3月前
|
存储 NoSQL 物联网
【MongoDB】MongoDB 数据库概述
【4月更文挑战第1天】【MongoDB】MongoDB 数据库概述
【MongoDB】MongoDB 数据库概述
|
3月前
|
NoSQL 数据挖掘 BI
【MongoDB】MongoDB 聚合框架
【4月更文挑战第3天】【MongoDB】MongoDB 聚合框架
|
3月前
|
存储 运维 负载均衡
MongoDB详解(二)——MongoDB架构与原理
MongoDB详解(二)——MongoDB架构与原理
96 2
|
11月前
|
NoSQL Linux MongoDB
开发中MongoDB遇到的各种问题
开发中MongoDB遇到的各种问题
143 0
|
存储 SQL NoSQL
【mongo 系列】mongodb 学习一,基本 nosql 和 mongodb等数据库对比
咱们工作或者学习的过程中,接到一个需求,或者学习一个技能的时候,我们是如何去学习的呢?
125 2
|
存储 SQL JSON
三.MongoDB入门-Mongodb的CRUD
MongoDB入门-Mongodb的CRUD
|
NoSQL Java API
五.MongoDB入门-SpringData操作MongoDB
MongoDB入门-SpringData操作MongoDB
|
存储 NoSQL Linux
玩转MongoDB—搭建MongoDB集群
玩转MongoDB—搭建MongoDB集群