mongodb配置多数据源(spring boot)

1、pom文件中增加依赖

<!--mongodb-->

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-data-mongodb</artifactId>

</dependency>

2、配置两个数据源

<!-- mongodb -->

<ecej.admin.mongodb.servers>mongodb://db.stmongo.ecej.com:27017/ecejaoss</ecej.admin.mongodb.servers>

<ecej.emp.mongodb.servers>mongodb://db.simongo.ecej.com:27017/employee_location_st</ecej.emp.mongodb.servers>

3、application.properties中增加数据源引入

spring.data.mongodb.uri=@ecej.admin.mongodb.servers@

spring.data.mongodb.emp.uri=@ecej.emp.mongodb.servers@

4、分别新建两个数据源加载类

@Configuration

@EnableMongoRepositories(mongoTemplateRef = "mongoTemplate")//指定注入名称

public class MongodbConfig{

//从配置文件注入地址

@Value("${spring.data.mongodb.uri}")

private String uri;

·//用mongo工厂创建mongoTemplate 、并指定bean的名称

@Primary

@Bean(name = "mongoTemplate")

public MongoTemplate statisMongoTemplate() throws Exception {

//删除mongo由类创建集合时默认生成的类字段

MappingMongoConverter c =

new MappingMongoConverter(statisFactory(), new MongoMappingContext());

c.setTypeMapper(new DefaultMongoTypeMapper(null));

return new MongoTemplate(statisFactory(), c);

}

//创建mongo实例工厂

@Bean

@Primary

public MongoDbFactory statisFactory() throws Exception {

//指定最大链接时间和超时时间

return new SimpleMongoDbFactory(new MongoClient(new MongoClientURI(uri, MongoClientOptions.builder().maxConnectionIdleTime(30000).connectTimeout(5000))), "ecejaoss");

}

}


@Configuration

@EnableMongoRepositories(mongoTemplateRef = "empMongoTemplate")

public class EmpMongoConfig {

    @Value("${spring.data.mongodb.emp.uri}")

    private String uri;

    @Bean(name = "empMongoTemplate")

    public MongoTemplate listTemplate() throws Exception {

        //remove _class

        MappingMongoConverter c =

                new MappingMongoConverter(empMongoFactory(), new MongoMappingContext());

        c.setTypeMapper(new DefaultMongoTypeMapper(null));

        return new MongoTemplate(empMongoFactory(), c);

    }

    @Bean

    public MongoDbFactory empMongoFactory() throws Exception {

        String sourceName = "employee_location_dev";

        if(StringUtils.isNotBlank(uri)){

            String copUri = uri;

            int idx = copUri.lastIndexOf("/");

            if (idx == -1) {

                throw new IllegalArgumentException("mongodb_uri配置错误");

            } else {

                sourceName = copUri.substring(idx+1);

            }

        }

        return new SimpleMongoDbFactory(new MongoClient(new MongoClientURI(uri, MongoClientOptions.builder().maxConnectionIdleTime(30000).connectTimeout(5000))), sourceName);

    }

}

5、应用实例

@Autowired

@Qualifier("empMongoTemplate")

private MongoTemplate empMongoTemplate;

@Autowired

@Qualifier("mongoTemplate ")

private MongoTemplate mongoTemplate ;

6、若出现链接超时问题、则需排除自动注入

在spingboot启动类中加入

@SpringBootApplication(exclude = {MongoAutoConfiguration.class,MongoDataAutoConfiguration.class})

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,500评论 19 139
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,930评论 1 92
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,253评论 6 342
  • 001 拖延的定义 真正的拖延是推迟去做某些必须要做的事情,并且为此感到苦恼不已。 002 拖延的危害 拖延的世界...
    木筒阅读 202评论 4 4
  • 爬向一个新的地方,没有向往,只有流离的伤。 高速路上的迷惘破烂的衣裳肮脏的眼神探向光芒 呼啸而过的夕阳扯下金色的包...
    半朽阅读 439评论 13 27

友情链接更多精彩内容