七.SpringBoot集成实例系列-多数据源mongodb(一)
2017-10-14 14:15
585 查看
文章列表
本系列将通过实例分别实现Springboot集成mybatis(mysql),mail,mongodb,cassandra,scheduler,redis,kafka,shiro,websocket。
具体文章系列如下:
一.SpringBoot集成实例系列-xml型单数据源mybatis
二.SpringBoot集成实例系列-xml型多数据源mybatis
三.SpringBoot集成实例系列-注解型单数据源mybatis
四.SpringBoot集成实例系列-注解型多数据源mybatis
五.SpringBoot集成实例系列-邮件email
六.SpringBoot集成实例系列-单数据源mongodb
七.SpringBoot集成实例系列-多数据源mongodb(一)
七.SpringBoot集成实例系列-多数据源mongodb(二)
八.SpringBoot集成实例系列-缓存redis
九.SpringBoot集成实例系列-数据库cassandra
十.SpringBoot集成实例系列-定时任务scheduler
十一.SpringBoot集成实例系列-消息队列kafka
十二.SpringBoot集成实例系列-消息推送websocket
上一章,我们介绍了springboot集成单数据源的mongodb,但实际环境中单个mongodb一般是很少的,正常都是使用主从或集群mongodb环境。本来总结了两种方式实现springboot集成多数据源mongodb.第一种直接通过配置文件来创建不同的MongoDbFactory;第二种通过lombok+MongoDbFactory+MongoProperties+注解的方式。
下面让我们开始第一种集成方式:
1.需求
通过来个不同数据源中指定数据库中的collections中数据个数?
2.技术要点
2.1 配置文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/201710/73f24c249419d3ef9f7a1b0e8cbec8fd)
两个数据源primary和secondary
2.2 创建SimpleMongoDbFactory
![](https://oscdn.geek-share.com/Uploads/Images/Content/201710/0d108c9d0e78609db369d02e687dd6d8)
自定义MongoDbFactory实现方法,不同数据源继承该方法创建对应的MongoDbFactory。
主要本实例mongodb环境是设置了权限认证的,如未认证,可以简单的通过
newSimpleMongoDbFactory(newMongoClient(host,
port), database)
实现。
2.3 不同数据源实现
![](https://oscdn.geek-share.com/Uploads/Images/Content/201710/a862791091a31d4efe8347aa0b43f95a)
第一个框:加载配置文件属性分隔符
第二个框:设置MongoTemplate通过name实现注入
2.4 不同数据源调用
![](https://oscdn.geek-share.com/Uploads/Images/Content/201710/6e70f83cb51a89c7777c2096cb04ed22)
根据Autowired+Qualifier注解实例化
3.代码实现
3.1 项目结构
![](https://oscdn.geek-share.com/Uploads/Images/Content/201710/765c89afd7e8e656b349f0425c87938e)
3.2 数据源配置文件
3.3 通用SimpleMongoDbFactory生成类
3.4 主数据源加载
3.5 第二数据源加载
3.6 业务方法
3.7 测试实例
3.8 演示效果
![](https://oscdn.geek-share.com/Uploads/Images/Content/201710/3834a43091716d8fc00c6c5a9f285877)
4.代码地址
代码管理地址:
Github:https://github.com/a123demi/spring-boot-integration
本系列将通过实例分别实现Springboot集成mybatis(mysql),mail,mongodb,cassandra,scheduler,redis,kafka,shiro,websocket。
具体文章系列如下:
一.SpringBoot集成实例系列-xml型单数据源mybatis
二.SpringBoot集成实例系列-xml型多数据源mybatis
三.SpringBoot集成实例系列-注解型单数据源mybatis
四.SpringBoot集成实例系列-注解型多数据源mybatis
五.SpringBoot集成实例系列-邮件email
六.SpringBoot集成实例系列-单数据源mongodb
七.SpringBoot集成实例系列-多数据源mongodb(一)
七.SpringBoot集成实例系列-多数据源mongodb(二)
八.SpringBoot集成实例系列-缓存redis
九.SpringBoot集成实例系列-数据库cassandra
十.SpringBoot集成实例系列-定时任务scheduler
十一.SpringBoot集成实例系列-消息队列kafka
十二.SpringBoot集成实例系列-消息推送websocket
上一章,我们介绍了springboot集成单数据源的mongodb,但实际环境中单个mongodb一般是很少的,正常都是使用主从或集群mongodb环境。本来总结了两种方式实现springboot集成多数据源mongodb.第一种直接通过配置文件来创建不同的MongoDbFactory;第二种通过lombok+MongoDbFactory+MongoProperties+注解的方式。
下面让我们开始第一种集成方式:
1.需求
通过来个不同数据源中指定数据库中的collections中数据个数?
2.技术要点
2.1 配置文件
两个数据源primary和secondary
2.2 创建SimpleMongoDbFactory
自定义MongoDbFactory实现方法,不同数据源继承该方法创建对应的MongoDbFactory。
主要本实例mongodb环境是设置了权限认证的,如未认证,可以简单的通过
newSimpleMongoDbFactory(newMongoClient(host,
port), database)
实现。
2.3 不同数据源实现
第一个框:加载配置文件属性分隔符
第二个框:设置MongoTemplate通过name实现注入
2.4 不同数据源调用
根据Autowired+Qualifier注解实例化
3.代码实现
3.1 项目结构
3.2 数据源配置文件
spring.application.name=spirngboot-integ-mongo-mdsource spring.data.mongodb.primary.database=logs spring.data.mongodb.primary.host=127.0.0.1 spring.data.mongodb.primary.password=user1 spring.data.mongodb.primary.port=27017 spring.data.mongodb.primary.username=user1 spring.data.mongodb.secondary.database=t_user spring.data.mongodb.secondary.host=127.0.0.1 spring.data.mongodb.secondary.password=user1 spring.data.mongodb.secondary.port=27017 spring.data.mongodb.secondary.username=user1
3.3 通用SimpleMongoDbFactory生成类
package com.lm.first.config; import java.util.ArrayList; import java.util.List; import org.springframework.data.mongodb.MongoDbFactory; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.SimpleMongoDbFactory; import com.mongodb.MongoClient; import com.mongodb.MongoCredential; import com.mongodb.ServerAddress; /** * 根据配置文件创建MongoDbFactory * @date 2017年10月14日 * */ public abstract class AbstractMongoConfig { // Mongo DB Properties private String host, database, username, password; private int port; // Setter methods go here.. 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 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 int getPort() { return port; } public void setPort(int port) { this.port = port; } /* * Method that creates MongoDbFactory Common to both of the MongoDb * connections */ public MongoDbFactory mongoDbFactory() throws Exception { ServerAddress serverAddress = new ServerAddress(host, port); List<MongoCredential> mongoCredentialList = new ArrayList<>(); mongoCredentialList.add(MongoCredential.createCredential(username, database, password.toCharArray())); return new SimpleMongoDbFactory(new MongoClient(serverAddress, mongoCredentialList), database); } /* * Factory method to create the MongoTemplate */ abstract public MongoTemplate getMongoTemplate() throws Exception; }
3.4 主数据源加载
package com.lm.first.config; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.data.mongodb.core.MongoTemplate; @Configuration //Configuration class @ConfigurationProperties(prefix = "spring.data.mongodb.primary") //Defines my custom prefix and points to the primary db properties public class PrimaryMongoConfig extends AbstractMongoConfig { /** * Implementation of the MongoTemplate factory method * @Bean gives a name (primaryMongoTemplate) to the created MongoTemplate instance * @Primary declares that if MongoTemplate is autowired without providing a specific name, * this is the instance which will be mapped by default */ @Primary @Override public @Bean(name = "primaryMongoTemplate") MongoTemplate getMongoTemplate() throws Exception { return new MongoTemplate(mongoDbFactory()); } }
3.5 第二数据源加载
package com.lm.first.config; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.mongodb.core.MongoTemplate; @Configuration //Configuration @ConfigurationProperties(prefix = "spring.data.mongodb.secondary") //Defines my custom prefix and points to the secondary db properties public class SecondaryMongoConfig extends AbstractMongoConfig{ /** * Implementation of the MongoTemplate factory method * @Bean gives a name (primaryMongoTemplate) to the created MongoTemplate instance * Note that this method doesn't have @Primary */ @Override public @Bean(name = "secondaryMongoTemplate") MongoTemplate getMongoTemplate() throws Exception { return new MongoTemplate(mongoDbFactory()); } }
3.6 业务方法
package com.lm.first.dao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; import com.lm.first.entry.PrimaryMongoObject; import com.lm.first.entry.SecondaryMongoObject; /** * 业务实现 * @date 2017年10月14日 * */ @Service public class MongoObjectDaoImpl implements MongoObjectDao { // Using MongoTemplate for primary database @Autowired @Qualifier(value = "primaryMongoTemplate") protected MongoTemplate primaryMongoTemplate; // Using mongoTemplate for secondary database @Autowired @Qualifier(value = "secondaryMongoTemplate") protected MongoTemplate secondaryMongoTemplate; @Override public void savePrimary(PrimaryMongoObject primaryMongoObject) { primaryMongoTemplate.save(primaryMongoObject); } @Override public void saveSecondary(SecondaryMongoObject secondaryMongoObject) { secondaryMongoTemplate.save(secondaryMongoObject); } @Override public long getCount(String value) { Query query = new Query(Criteria.where("value").is(value)); long primary = primaryMongoTemplate.count(query, PrimaryMongoObject.class); long secondary = secondaryMongoTemplate.count(query, SecondaryMongoObject.class); return (primary + secondary); } }
3.7 测试实例
package com.lm.first; import java.util.Date; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import com.lm.first.dao.MongoObjectDao; import com.lm.first.entry.PrimaryMongoObject; import com.lm.first.entry.SecondaryMongoObject; public class MongoDaoTest extends AppTest { @Autowired private MongoObjectDao mongoObjectDao; @Test public void testSavePrimary() throws Exception { PrimaryMongoObject primaryMongoObject = new PrimaryMongoObject(); primaryMongoObject.setId("p1" + new Date().getTime()); primaryMongoObject.setValue("xiaoming"); mongoObjectDao.savePrimary(primaryMongoObject); } @Test public void testSaveSecondary() { SecondaryMongoObject secondaryMongoObject = new SecondaryMongoObject(); secondaryMongoObject.setId("s1" + new Date().getTime()); secondaryMongoObject.setValue("xiaoming"); mongoObjectDao.saveSecondary(secondaryMongoObject); } @Test public void testGetCount() { long count = mongoObjectDao.getCount("xiaoming"); System.out.println("===============================count:" + count); } }
3.8 演示效果
4.代码地址
代码管理地址:
Github:https://github.com/a123demi/spring-boot-integration
相关文章推荐
- 六.SpringBoot集成实例系列-单数据源mongodb(权限控制)
- 七.SpringBoot集成实例系列-多数据源mongodb+lombok(二)
- 一. SpringBoot集成实例系列-xml型单数据源mybatis
- 四.SpringBoot集成实例系列-注解型多数据源mybatis
- 二.SpringBoot集成实例系列-xml型多数据源mybatis
- 三.SpringBoot集成实例系列-注解型单数据源mybatis
- springBoot系列教程02:mongodb的集成及使用
- C#工业物联网和集成系统解决方案的技术路线(数据源、数据采集、数据上传与接收、ActiveMQ、Mongodb、WebApi、手机App)
- Spring Boot 系列 | 第八篇:集成MongoDB
- Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程
- springboot配置多数据源的实例(MongoDB主从)
- springboot Mongodb的集成与使用实例详解
- MongoDB系列教程(六):java操作mongodb实例
- MongoDB集群与LBS应用系列(二)--与Hadoop集成
- springBoot系列教程04:mybatis及druid数据源的集成及查询缓存的使用
- PHP操作MongoDB实例 --- ttlsa教程系列之mongodb(十一)
- 五.SpringBoot集成实例系列-邮件email文章列表
- 八.SpringBoot集成实例系列-持久化jpa
- MongoDB系列教程(六):java操作mongodb实例
- (Java2D 学习笔记系列) (一)一个简单的图像填充实例及其分析理解