demo 下载地址
https://download.csdn.net/download/zhanglinlang/10670656
//依赖
<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-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
配置文件:
spring:
data:
mongodb:
main:
uri:mongodb://[username]:[password]@[address1:port]/[database]?replicaSet=mgset-8999609
read:
uri:mongodb://[username]:[password]@[address2:port]/[database]?replicaSet=mgset-8999609
@Configuration
public class MultipleMongoProperties {
@Bean(name="readMongoProperties")
@ConfigurationProperties(prefix="spring.data.mongodb.read")
public MongoProperties readMongoProperties() {
return new MongoProperties();
}
@Bean(name="mainMongoProperties")
@Primary
@ConfigurationProperties(prefix="spring.data.mongodb.main")
public MongoProperties mainMongoProperties() {
return new MongoProperties();
}
}
@Configuration
//指定 包com.zll.mongodb.main下默认 注入 MainMongo
@EnableMongoRepositories(basePackages = "com.zll.mongodb.main", mongoTemplateRef = "mainMongo")
public class MainMongoTemplate {
//注入 名称为 mainMongoProperties 的 MongoProperties 对象
@Resource(name = "mainMongoProperties")
private MongoProperties mongoProperties;
@Primary //设置默认值 当使用 @Autowired 等自动注入时,没有指定name 时 默认使用 带@Primary 注解的对象。
@Bean(name = "mainMongo") //创建方法 交给 spring 创建的名称 为 mainMongo
public MongoTemplate mainMongoTemplate() throws Exception {
return new MongoTemplate(mainFactory(this.mongoProperties));
}
@Bean
@Primary
public MongoDbFactory mainFactory(MongoProperties mongoProperties) throws Exception {
//如果你的 配置文件中 使用的是 uri 这里就配置 uri 网上很多这里配置错了,导致无法正常运行。
return new SimpleMongoDbFactory(new MongoClientURI(mongoProperties.getUri()));
}
}
第二数据源
@Configuration
@EnableMongoRepositories(basePackages = "com.zll.mongodb.read", mongoTemplateRef = "readMongo")
public class ReadMongoTemplate {
@Resource(name = "readMongoProperties")
private MongoProperties mongoProperties;
@Bean(name = "readMongo")
public MongoTemplate readTemplate() throws Exception {
MongoDbFactory mongoDbFactory = listFactory(this.mongoProperties);
return new MongoTemplate(mongoDbFactory);
}
@Bean
public MongoDbFactory listFactory(MongoProperties mongoProperties) {
return new SimpleMongoDbFactory(new MongoClientURI(mongoProperties.getUri()));
}
}
@RunWith(SpringRunner.class)
@SpringBootTest
public class MongodbApplicationTests {
//读取 @Bean(name = "mainMongo") 的 MongoDb
@Resource(name = "readMongo")
MongoTemplate mongoTemplate;
@Autowired
ReadShopMG shopMG;
@Test
public void db() throws Exception {
mongoTemplate.getCollectionNames().forEach(System.out::println);
}
@Test
public void getBB(){
Shop shop = new Shop();
shop.setAge(123);
List<Shop> aa = mongoTemplate.findAll(Shop.class);
System.out.println(aa.size());
mongoTemplate.insert(shop);
List<Shop> all = mongoTemplate.findAll(Shop.class);
System.out.println(all.size());
}
}