背景:
公司项目需要推广部署到多个客户,每个客户独立数据库,但使用的项目前后台及app使用的同一套业务。在不改变原调用链接的情况下,只部署一套代码。
需要解决的具体问题:
1.不同链接需要统一跳转
2.支持可配置的动态数据源切换
3.为防止一套代码而带来的请求压力,需要做负载与备份
4.因负载而带来的,项目中可变的静态常量处理
5.因负载而带来的,项目中定时器的处理,不同项目(数据源)对应的定时器运行
6.因负载而带来的,项目中文件的保存问题
解决措施
1.应领导提议,项目现在由springmvc改为springboot框架,所以之前的项目链接都包含项目名。实现一个Filter,将原链接的项目名截取下来,并重定向到一个统一的请求路径
2.这里通过继承实现AbstractDataSource类,将配置文件中的所有数据源实例化并保存,重写getConnection方法,通过1中截取的项目名,获取本次请求需要的数据源并建立连接
3.这里通过nginx来配置负载与备份
4.在每个数据库中建立一张常量表,项目初始化时分别查询所有数据源中对应的数据并储存,在接收到请求后获取本次请求需要的常量
5.指定一个主定时器项目,在定时器运行时,读取项目配置,只有一个项目配置为定时器正常启动;定时器运行过程中,循环所有数据源,分别设置项目名,并执行业务
6.因项目本身租用阿里云服务器,这里文件上传就直接上传至阿里oss服务器(备注:在nginx转发文件上传请求过程中,发现向非本机转发时,文件上传时间过长。解决办法:使用域名作为代理链接地址)
原文:https://www.cnblogs.com/gutaolei/p/10812872.html