美文网首页
mongodb配置多数据源(spring boot)

mongodb配置多数据源(spring boot)

作者: 说好的幸福_ | 来源:发表于2018-10-26 10:38 被阅读0次

    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})

    相关文章

      网友评论

          本文标题:mongodb配置多数据源(spring boot)

          本文链接:https://www.haomeiwen.com/subject/jtlktqtx.html