首先引入pom文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
在application.properties中配置信息
#第一个mongodb配置
spring.data.mongodb.primary.database=violation
#如果有多个地址 则这样写localhost:27017,localhost:27017 中间以逗号隔开
spring.data.mongodb.primary.hostPort=192.168.100.200:27017
spring.data.mongodb.primary.password=
spring.data.mongodb.primary.username=
#第二个mongodb配置
spring.data.mongodb.secondary.database=palmRoad
spring.data.mongodb.secondary.hostPort=192.168.100.201:27017
spring.data.mongodb.secondary.password=
spring.data.mongodb.secondary.username=
#去除mongodb自动配置
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration
根据配置文件创建mongodbFactory,重新建立一个工厂
public abstract class AbstractMongoConfig {
// Mongo DB Properties
private String hostPort, database, username, password;
// private String port;
// Setter methods go here..
public String getHostPort() {
return hostPort;
}
public void setHostPort(String hostPort) {
this.hostPort = hostPort;
}
public String getDatabase() {
return database;
}
public void setDatabase(String database) {
this.database = database;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public MongoDbFactory mongoDbFactory() throws Exception {
List<ServerAddress> seeds = new ArrayList<>();
String[] hostPorts = hostPort.split(",");
for(int i = 0 ; i < hostPorts.length;i++){
String[] hps = hostPorts[i].split(":");
ServerAddress serverAddress = new ServerAddress(hps[0], Integer.valueOf(hps[1]));
seeds.add(serverAddress);
}
if(StringUtils.isEmpty(username) || StringUtils.isEmpty(password)){
return new SimpleMongoDbFactory(new MongoClient(seeds), database);
}
List<MongoCredential> mongoCredentialList = new ArrayList<>();
mongoCredentialList.add(MongoCredential.createCredential(username, database, password.toCharArray()));
return new SimpleMongoDbFactory(new MongoClient(seeds, mongoCredentialList), database);
}
abstract public MongoTemplate getMongoTemplate() throws Exception;
}
区分两个数据源信息
创建新的类继承刚创建的mongodb工厂
数据源1:
@Configuration
@ConfigurationProperties(prefix = "spring.data.mongodb.primary")
public class PrimaryMongoConfig extends AbstractMongoConfig {
@Primary //如果不指定数据源则默认次数据源
@Override
public @Bean(name = "primaryMongoTemplate") MongoTemplate getMongoTemplate() throws Exception {
return new MongoTemplate(mongoDbFactory());
}
}
数据源2:
@Configuration
@ConfigurationProperties(prefix = "spring.data.mongodb.secondary")
public class SecondaryMongoConfig extends AbstractMongoConfig{
@Override
public @Bean(name = "secondaryMongoTemplate") MongoTemplate getMongoTemplate() throws Exception {
return new MongoTemplate(mongoDbFactory());
}
}
这样就可以用了,但是用的时候需要标明所用的数据源是哪个,如果不标明则默认刚设置的默认数据源
@Autowired
@Qualifier(value = "primaryMongoTemplate")
private MongoTemplate mongoTemplate;
@Autowired
@Qualifier(value = "secondaryMongoTemplate")
private MongoTemplate secondaryMongoTemplate;