springboot集成MongoDB使用多数据源

  作者:记性不好的阁主

0.依赖


<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>


1、配置application.properties


spring.application.name=spring-boot-multi-mongodb

mongodb.primary.uri=mongodb://106.54.196.44:27017
mongodb.primary.database=primary
mongodb.secondary.uri=mongodb://106.54.196.44:27017
mongodb.secondary.database=secondary


这里指定了两个数据库 primary 和 secondary


2、配置mongo




MultipleMongoProperties.java


多数据源整合配置


package com.neo.config.props;

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



MultipleMongoConfig.java


多数据源整合配置


package com.neo.config;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.neo.config.props.MultipleMongoProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;

@Configuration
public class MultipleMongoConfig {

@Autowired
private MultipleMongoProperties mongoProperties;

@Primary
@Bean(name = "primaryMongoTemplate")
public MongoTemplate primaryMongoTemplate() throws Exception {
return new MongoTemplate(primaryFactory(this.mongoProperties.getPrimary()));
}

@Bean
@Qualifier("secondaryMongoTemplate")
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());
}
}


数据源1配置


package com.neo.config;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.neo.config.props.MultipleMongoProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;


@Configuration
@EnableConfigurationProperties(MultipleMongoProperties.class)
@EnableMongoRepositories(basePackages = "com.neo.repository.primary",
mongoTemplateRef = "primaryMongoTemplate")
public class PrimaryMongoConfig {
}



数据源2配置


package com.neo.config;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.neo.config.props.MultipleMongoProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;


@Configuration
@EnableConfigurationProperties(MultipleMongoProperties.class)
@EnableMongoRepositories(basePackages = "com.neo.repository.secondary",
mongoTemplateRef = "secondaryMongoTemplate")
public class SecondaryMongoConfig {

}



3、实例类





package com.neo.model;

import java.io.Serializable;


public class User implements Serializable {
private static final long serialVersionUID = -3258839839160856613L;
private String id;
private String userName;
private String passWord;

public User(String userName, String passWord) {
this.userName = userName;
this.passWord = passWord;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

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

@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", userName='" + userName + '\'' +
", passWord='" + passWord + '\'' +
'}';
}
}


4、数据库操作接口




数据库操作接口1


package com.neo.repository.primary;

import com.neo.model.User;
import org.springframework.data.mongodb.repository.MongoRepository;

/**
* @author neo
*/
public interface PrimaryRepository extends MongoRepository<User, String> {
}


数据库操作接口2


package com.neo.repository.secondary;

import com.neo.model.User;
import org.springframework.data.mongodb.repository.MongoRepository;

/**
* @author neo
*/
public interface SecondaryRepository extends MongoRepository<User, String> {
}



5、测试


两个数据库各添加一个user


package com.neo.repository;

import com.neo.model.User;
import com.neo.repository.primary.PrimaryRepository;
import com.neo.repository.secondary.SecondaryRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;


@RunWith(SpringRunner.class)
@SpringBootTest
public class MuliDatabaseTest {

@Autowired
private PrimaryRepository primaryRepository;

@Autowired
private SecondaryRepository secondaryRepository;

@Test
public void TestSave() {
System.out.println("************************************************************");
System.out.println("测试开始");
System.out.println("************************************************************");
this.primaryRepository.save(new User("小张", "123456"));
this.secondaryRepository.save(new User("小王", "654321"));
List<User> primaries = this.primaryRepository.findAll();
for (User primary : primaries) {
System.out.println(primary.toString());
}
List<User> secondaries = this.secondaryRepository.findAll();
for (User secondary : secondaries) {
System.out.println(secondary.toString());
}
System.out.println("************************************************************");
System.out.println("测试完成");
System.out.println("************************************************************");
}

}



相关推荐

评论 抢沙发

表情

分类选择