springboot系列15:多数据源MongoDB

 上一篇介绍了mongodb单数据源的使用,这次我们聊聊多数据源的使用。

多数据源 MongoDB 的使用

 

1、pom 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

 

2、 配置两条数据源

1
2
3
4
mongodb.primary.uri=mongodb://localhost:28018
mongodb.primary.database=primary
mongodb.secondary.uri=mongodb://localhost:28018
mongodb.secondary.database=secondary

 

3、 配置映射类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package top.zlcxy.multimongodb.properties;
 
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
 
@ConfigurationProperties(prefix = "mongodb")
public class MultipleMongoProperties {
 
    private MongoProperties primary = new MongoProperties();
    private MongoProperties secondary = new MongoProperties();
 
    public MongoProperties getPrimary() {
        return primary;
    }
 
    public void setPrimary(MongoProperties primary) {
        this.primary = primary;
    }
 
    public MongoProperties getSecondary() {
        return secondary;
    }
 
    public void setSecondary(MongoProperties secondary) {
        this.secondary = secondary;
    }
}

 

4、 对第一个库封装

1
2
3
4
5
6
7
8
@Configuration
@EnableConfigurationProperties(MultipleMongoProperties.class)
@EnableMongoRepositories(basePackages = "top.zlcxy.multimongodb.repository.primary",
        mongoTemplateRef = PrimaryMongoConfig.MONGO_TEMPLATE)
public class PrimaryMongoConfig {
 
    protected static final String MONGO_TEMPLATE = "primaryMongoTemplate";
}

 

5、 对第二个库封装

1
2
3
4
5
6
7
8
@Configuration
@EnableConfigurationProperties(MultipleMongoProperties.class)
@EnableMongoRepositories(basePackages = "top.zlcxy.multimongodb.repository.secondary",
        mongoTemplateRef = SecondaryMongoConfig.MONGO_TEMPLATE)
public class SecondaryMongoConfig {
 
    protected static final String MONGO_TEMPLATE = "secondaryMongoTemplate";
}

 

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@Configuration
public class MultipleMongoConfig {
 
    @Autowired
    private MultipleMongoProperties mongoProperties;
 
    @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 {
        MongoClient client = new MongoClient(new MongoClientURI(mongoProperties.getPrimary().getUri()));
        return new SimpleMongoDbFactory(client, mongoProperties.getPrimary().getDatabase());
    }
 
    @Bean
    public MongoDbFactory secondaryFactory(MongoProperties mongo) throws Exception {
        MongoClient client = new MongoClient(new MongoClientURI(mongoProperties.getSecondary().getUri()));
        return new SimpleMongoDbFactory(client, mongoProperties.getSecondary().getDatabase());
    }
}

 

6、 测试编写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@RunWith(SpringRunner.class)
@SpringBootTest
public class MuliMongodbTest {
 
    @Autowired
    private UserPrimaryRepository userPrimaryRepository;
 
    @Autowired
    private UserSecondaryRepository userSecondaryRepository;
 
    @Test
    public void testUser() {
        userPrimaryRepository.save(new User(1L,"张三", "123456"));
        List<User> primaryUsers = userPrimaryRepository.findAll();
        for (User user : primaryUsers) {
            System.out.println(user);
        }
 
        userSecondaryRepository.save(new User(2L,"李四", "123456"));
        List<User> secondaryUsers = userSecondaryRepository.findAll();
        for (User user : secondaryUsers) {
            System.out.println(user);
        }
 
    }
 
}

 

7、 测试结果

1
2
3
4
2020-06-14 18:11:18.614  INFO 7120 --- [           main] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:3, serverValue:14}] to localhost:28018
User{id=1, userName='张三', passWord='123456'}
2020-06-14 18:11:19.019  INFO 7120 --- [           main] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:4, serverValue:15}] to localhost:28018
User{id=2, userName='李四', passWord='123456'}

 

 

posted @   IT6889  阅读(587)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示