springboot系列15:多数据源MongoDB

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

多数据源 MongoDB 的使用

 

1、pom 配置

    <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、 配置两条数据源

mongodb.primary.uri=mongodb://localhost:28018
mongodb.primary.database=primary
mongodb.secondary.uri=mongodb://localhost:28018
mongodb.secondary.database=secondary

 

3、 配置映射类

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、 对第一个库封装

@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、 对第二个库封装

@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

@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、 测试编写

@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、 测试结果

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 @ 2022-01-13 19:39  IT6889  阅读(552)  评论(0编辑  收藏  举报