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

 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号