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号