七.SpringBoot集成实例系列-多数据源mongodb(一)
来源:互联网 发布:北大青鸟编程v5 编辑:程序博客网 时间:2024/06/06 18:23
文章列表
本系列将通过实例分别实现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-mdsourcespring.data.mongodb.primary.database=logsspring.data.mongodb.primary.host=127.0.0.1spring.data.mongodb.primary.password=user1spring.data.mongodb.primary.port=27017spring.data.mongodb.primary.username=user1spring.data.mongodb.secondary.database=t_userspring.data.mongodb.secondary.host=127.0.0.1spring.data.mongodb.secondary.password=user1spring.data.mongodb.secondary.port=27017spring.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 Propertiesprivate 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 propertiespublic 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 propertiespublic 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日 * */@Servicepublic 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;@Overridepublic void savePrimary(PrimaryMongoObject primaryMongoObject) {primaryMongoTemplate.save(primaryMongoObject);}@Overridepublic void saveSecondary(SecondaryMongoObject secondaryMongoObject) {secondaryMongoTemplate.save(secondaryMongoObject);}@Overridepublic 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 {@Autowiredprivate MongoObjectDao mongoObjectDao;@Testpublic void testSavePrimary() throws Exception {PrimaryMongoObject primaryMongoObject = new PrimaryMongoObject();primaryMongoObject.setId("p1" + new Date().getTime());primaryMongoObject.setValue("xiaoming");mongoObjectDao.savePrimary(primaryMongoObject);}@Testpublic void testSaveSecondary() {SecondaryMongoObject secondaryMongoObject = new SecondaryMongoObject();secondaryMongoObject.setId("s1" + new Date().getTime());secondaryMongoObject.setValue("xiaoming");mongoObjectDao.saveSecondary(secondaryMongoObject);}@Testpublic void testGetCount() {long count = mongoObjectDao.getCount("xiaoming");System.out.println("===============================count:" + count);}}
3.8 演示效果
4.代码地址
代码管理地址:
Github:https://github.com/a123demi/spring-boot-integration
阅读全文
0 0
- 七.SpringBoot集成实例系列-多数据源mongodb(一)
- 七.SpringBoot集成实例系列-多数据源mongodb+lombok(二)
- 二.SpringBoot集成实例系列-xml型多数据源mybatis
- 四.SpringBoot集成实例系列-注解型多数据源mybatis
- SpringBoot集成多数据源
- 六.SpringBoot集成实例系列-单数据源mongodb(权限控制)
- springboot集成多数据源代码
- 一. SpringBoot集成实例系列-xml型单数据源mybatis
- springboot 多数据源
- springboot多数据源
- Spring Boot系列(七):springboot+mybatis多数据源最简解决方案
- springboot 配置多数据源
- springboot 配置多数据源
- SpringBoot-SpringData-多数据源
- springboot 多数据源配置
- springboot + mybatis + 多数据源
- SpringBoot+Mybatis多数据源
- springboot + mybatis + 多数据源
- 3GPP TS 36.331 ASN.1消息中Optional的含义
- 安卓调试/测试-AS(android studio)——工具篇之Android Monitors
- Python--selenium-webdriver输入框定位
- jdk1.8之前版本------->HashMap简述
- LeetCode 561. Array Partition I
- 七.SpringBoot集成实例系列-多数据源mongodb(一)
- 数据结构笔记之线性表
- java, double转String, 去掉0结尾的小数位
- 浅谈数据库中的触发器
- CAS单点登录-单点登出/退出/注销(十二)
- ARM+FPGA如何入门,如何学习入门嵌入式
- 细说Angular ng-class
- 学生管理系统——xsgl.util
- 【QT】信号和槽机制(二)