spring boot 动态数据源配置 & 运行时新增数据源

spring boot 动态数据源配置 & 运行时新增数据源

场景:

  1. 同一系统支持不同业务场景,需要用到不同的数据库。
  2. 各个用户/应用之间数据完全隔离(不同的用户/应用,不同的数据库),而一个程序需要支持不同的用户/应用。例如 一些paas服务需要支持不同的业务场景,但是不同项目之间数据、账号、权限、token等业务数据都是完全隔离的,仅共享机器资源。

一、spring boot 动态数据源配置

方案:在一个确切的地方存储 数据源的配置信息(我是将这些信息存储在一个 配置数据库表中,而这个配置数据库是确切的,作为主数据源配置)。启动spring时,会初始化这个配置数据源,然后将其他动态数据源信息取出来初始化好datasource 注册到spring 容器。

原理:主要是实现AbstractRoutingDataSource的抽象类,然后将该类注册到spring容器,其中关键点是:

  1. 配置AbstractRoutingDataSource类的默认数据源Object defaultTargetDataSource 和其他数据源Map<Object, Object> targetDataSources。targetDataSources就是我们动态配置的数据源,key-value 接口,后面根据key 查找 datasource
  2. 实现determineCurrentLookupKey()方法,该方法决定了当前操作选择哪个数据源
  3. 注册到spring 容器

License 设计

介绍

不提倡什么授权、加密、混淆,不过,有开源项目,也会有商业项目。也并不是所有产品都是Saas服务,如果是有对外有项目输出,且产品采用授权使用形式的企业,那么对自己的软件产品加上授权验证必不可少

特性

  1. RSA 非对称加密,公钥加密,私钥解密,保证license信息安全; –10.31补充,RSA每次加密密文都不一致,所以machine 信息不能用非对称加密,只能选用对称加密
  2. Digital Signature公钥数字签名;
    1. 防止license被冒充签发(认证);
    2. 保证数据完整性;
    3. 数字签名具有不可抵赖性(即不可否认性)
  3. 硬件信息采集,防止程序被无限copy
  4. 授权截止时间,完成业务上授权需求
  5. 使用license的业务代码混淆加密,防止反编译替换跳过验证流程
  6. 可以加入自定义数据(授权版本、授权对象、授权功能列表)等等,方便扩展

经纬度纠偏

民用地图不能反映真实经纬度坐标,存在一定偏差,感兴趣的一定知道为什么,不做过多解释

经纬度纠偏工具包,全文只有代码~~~

  • mapbar地图纠偏
  • 百度地图纠偏
  • 火星坐标纠偏
  • 经纬度距离计算

判断平面内点在多变形内外的射线算法及实现

判断一个点是否在多边形内&GIS LBS 系统中的应用说明

如何判断一个点是否在多边形内部?

  1. 面积和判别法:判断目标点与多边形的每条边组成的三角形面积和是否等于该多边形,相等则在多边形内部。
  2. 夹角和判别法:判断目标点与所有边的夹角和是否为360度,为360度则在多边形内部。
  3. 引射线法:从目标点出发引一条射线,看这条射线和多边形所有边的交点数目。如果有奇数个交点,则说明在内部,如果有偶数个交点,则说明在外部。

1.2.都非常好理解,但是1.2. 并不适合所有的多边形,比如说凹多边形。关于射线算法,好像没有公式证明,不过网上很多论文可以google到.

实例一
图一:点延伸出的射线穿过不规则多边形,往左射线交5点,往右射线交3点,所以判断点在多边形内

多边形要规避一些极端情况,比如自我闭合等情况,具体可以参考Determining Whether A Point Is Inside A Complex Polygon

关于GIS/LBS上的应用,问,该算法是否可以判断经纬度坐标是否在一个标记的地图围栏中(任意多边形),答案是可以,但是需要注意两个问题:


道格拉斯-普克抽稀算法

道格拉斯-普克抽稀算法,是用来对大量冗余的图形数据点进行压缩以提取必要的数据点。

文章包括三部分

  1. 算法原理
  2. 代码实现(csharp)
  3. 实际应用举例对比(图)

道格拉斯普克算法原理

该算法实现抽稀的过程是:

1)对曲线的首末点虚连一条直线,求曲线上所有点与直线的距离,并找出最大距离值dmax,用dmax与事先给定的阈值D相比:
2)若dmax<D,则将这条曲线上的中间点全部舍去;则该直线段作为曲线的近似,该段曲线处理完毕。
  若dmax≥D,保留dmax对应的坐标点,并以该点为界,把曲线分为两部分,对这两部分重复使用该方法,即重复1),2)步,直到所有dmax均<D,即完成对曲线的抽稀。
 
显然,本算法的抽稀精度也与阈值相关,阈值越大,简化程度越大,点减少的越多,反之,化简程度越低,点保留的越多,形状也越趋于原曲线。


CORS_跨来源资源共享_Ajax跨域资源共享

CORS 跨域资源共享相关技术分享

本篇包括以下内容:

  • CORS 定义
  • CORS 对比 JSONP
  • CORS,BROWSER支持情况
  • 主要用途
  • Ajax请求跨域资源的异常
  • CORS 思路
  • 安全说明
  • CORS 几种解决方案
    • 自定义CORSFilter
    • Nginx 配置支持Ajax跨域
    • 支持多域名配置的CORS Filter

keyword:cors,跨域,ajax,403,filter,RESTful,origin,http,nginx,jsonp


netty 粘包问题处理

netty 粘包问题处理

一般TCP粘包/拆包解决办法

  1. 定长消息,例如每个报文长度固定,不够补空格
  2. 使用回车换行符分割,在包尾加上分割符,例如Ftp协议
  3. 消息分割,头为长度(消息总长度或消息体长度),通常头用一个int32表示
  4. 复杂的应用层协议

netty的几种解决方案

特殊分隔符解码器:DelimiterBasedFrameDecoder

客户端发送消息


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×