SpringBoot对常用的数据库支持外,对NoSQL 数据库也进行了封装自动化。这一篇主要讲springboot与mongo多数据源相关的配置
1、mongo的介绍
MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式,这里不再多做说明。详细介绍参考mongo入门
2、项目构建
添加pom文件
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>
3、在application.properties中添加配置
##start mongodb for basic#----------------------------------------------basic.mongodb.host= 127.0.0.1basic.mongodb.port= 27017basic.mongodb.database= basic#----------------------------------------------##end mongodb for spirit##start mongodb for basic#----------------------------------------------order.mongodb.host= 127.0.0.2order.mongodb.port= 27017order.mongodb.database= order#----------------------------------------------##end mongodb for spirit
4、配置相应的数据源
这里我们采用mongoTemplate这种模式去做mongo的相关操作
先写一个基础的抽象类
public abstract class AbstractMongoConfigure {private String host, database;private int port;/** Method that creates MongoDbFactory* Common to both of the MongoDb connections*/public MongoDbFactory mongoDbFactory() throws Exception {return new SimpleMongoDbFactory(new MongoClient(host, port), database);}/** Factory method to create the MongoTemplate*/abstract public MongoTemplate getMongoTemplate() throws Exception;public String getHost() {return host;}public void setHost(String host) {this.host = host;}public String getDatabase() {return database;}public void setDatabase(String database) {this.database = database;}public int getPort() {return port;}public void setPort(int port) {this.port = port;}}
3.1)接下来第一个库的封装
@Configuration@EnableMongoRepositories(basePackages = {"com.sunliangliang.service.basic"}, mongoTemplateRef = "basicMongoTemplate")@ConfigurationProperties(prefix = "basic.mongodb")public class BasicMongoConfigure extends AbstractMongoConfigure {@Override@Bean(name = "basicMongoTemplate")public MongoTemplate getMongoTemplate() throws Exception {return new MongoTemplate(mongoDbFactory());}}
其中 basePackages 的值是该库应用于相应的基础包,prefix即为相应的applications中的配置值
3.2)接下来第两个库的封装
@Configuration@EnableMongoRepositories(basePackages = {"com.sunliangliang.service.order"}, mongoTemplateRef = "orderMongoTemplate")@ConfigurationProperties(prefix = "order.mongodb")public class OrderMongoConfigure extends AbstractMongoConfigure{@Primary@Override@Bean(name = "orderMongoTemplate")public MongoTemplate getMongoTemplate() throws Exception {return new MongoTemplate(mongoDbFactory());}}
封装完成后接下来进行相应实体的配置
4、创建数据实体
public class UserInfo implements Serializable{private long id;private String username;private String password;private String nickname;private int age;private String name;public long getId() {return id;}public void setId(long 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;}public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
4、添加对实体的操作
在这里我写了一个公用的接口用于基础的增删改查
public interface BaseService<T> {Boolean save(T entity);Boolean update(T entity);Boolean delete(Long id);T getById(Long id);List<T> listAll();List<T> listAll(T entity);}
接下来接口的实现
@Servicepublic class UserInfoService implements BaseService<UserInfo>{@Autowired@Qualifier("basicMongoTemplate")private MongoTemplate mongoTemplate;@Overridepublic Boolean save(UserInfo entity) {mongoTemplate.save(entity);return true;}@Overridepublic Boolean update(UserInfo entity) {return null;}@Overridepublic Boolean delete(Long id) {return null;}@Overridepublic UserInfo getById(Long id) {return null;}@Overridepublic List<UserInfo> listAll() {return mongoTemplate.findAll(UserInfo.class);}@Overridepublic List<UserInfo> listAll(UserInfo entity) {return null;}}
注意此处@Qualifier(“basicMongoTemplate”)中即为相应的具体实现类。
这里只写了添加和查询列表的实现,其他的查询相应的api即可
@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTestpublic class UserInfoServiceTest {@Autowiredprivate UserInfoService userInfoService;@Testpublic void save() throws Exception {UserInfo userInfo = new UserInfo();userInfo.setAge(23);userInfo.setId(1000l);userInfo.setName("管理员");userInfo.setNickname("hehe");userInfo.setPassword("123456");userInfo.setUsername("admin");userInfoService.save(userInfo);}@Testpublic void listAll() throws Exception {userInfoService.listAll();}}
若库不存在,会自动生成相应的库和文档 如图:

另一个order相关库的配置就不再这里写了,相应的请参考代码
github中lessons-5

本文分享自微信公众号 - 码农小胖哥(Felordcn)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。




