SpringBoot项目开发(二十二):SpringBoot MongoDB实现副本集(读写分离)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhuyu19911016520/article/details/82998162
1.MongoDB可以单库、主从(官方现已不推荐)、副本集、分片加副本集,通过分片加副本集可以组成庞大的数据存储集群,而大部分项目使用副本集就能满足需求了
2.MongoDB副本集(Replica Set):有自动故障恢复功能的主从集群,有一个Primary节点和一个或多个Secondary节点组成。
3.副本集环境搭建,请参考 Mongodb安装与设置副本集
4.SpringBoot实现 MongoDB的连接与读写分离操作,这个操作我卡了很久,其实也很简单,就是连接字符串导致的,mongodb在SpringBoot项目的 application.properties文件中连接配置
# MongoDB URI配置 重要,添加了用户名和密码验证
spring.data.mongodb.uri=mongodb://zhuyu:[email protected]:27017,192.168.68.137:27017,192.168.68.139:27017/ai?slaveOk=true&replicaSet=zypcy&write=1&readPreference=secondaryPreferred&connectTimeoutMS=300000

#每个主机的连接数
spring.data.mongodb.connections-per-host=50
#线程队列数,它以上面connectionsPerHost值相乘的结果就是线程队列最大值
spring.data.mongodb.threads-allowed-to-block-for-connection-multiplier=50
spring.data.mongodb.connect-timeout=5000
spring.data.mongodb.socket-timeout=3000
spring.data.mongodb.max-wait-time=1500
#控制是否在一个连接时,系统会自动重试
spring.data.mongodb.auto-connect-retry=true
spring.data.mongodb.socket-keep-alive=true

请仔细看好 spring.data.mongodb.uri 的配置,他的格式如下,可以参考mongodb连接

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

网上使用uri连接的很多都是错误的,导致我项目代码一直连接不上

我本地MongoDB环境,192.168.68.137是主库,138、139是从库,主库写,从库查

5.代码示例,创建一个 Rest风格的 IndexController ,提供:添加与查询接口,访问这2个接口,看控制台输出,是否查操作自动分配到从库,写操作分配到主库
@RequestMapping("/index")
@RestController
public class IndexController {

    @Autowired private MongoTemplate mongoTemplate;

    @RequestMapping("/getList")
    public List<TestModel> getList(){
        List<TestModel> list = mongoTemplate.findAll(TestModel.class,"test");
        return list;
    }

    @RequestMapping("/add")
    public String add(){
        TestModel model = new TestModel("zhuyu" + System.currentTimeMillis());
        mongoTemplate.insert(model , "test");
        return "success";
    }
}
5.1启动项目,测试流程如下:(已先添加了1000条数据)
  • 1先访问 getList
  • 2再访问 add
  • 3然后使用测试工具 jmeter 做并发测试
  • 4最后查看 IEDA的控制台,看请求是否自动把写操作分配到主库,读操作分配到从库

a 访问 getList
在这里插入图片描述
b 访问 add
在这里插入图片描述
c 工具 jmeter 做并发测试,每1秒100个线程并发 getList读请求,且循环5次,总共500个请求,下面是测试结果
在这里插入图片描述

d IDEA的控制台,第一 getList读请求分配到从库138上,第二个 add写请求分配到主库137上,其他的是jmeter测试工具并发 getList读请求的结果,都是在 138、139从库上
在这里插入图片描述

大功告成,源码下载

猜你喜欢

转载自blog.csdn.net/zhuyu19911016520/article/details/82998162
今日推荐