tinyId源码研究笔记

开卷必有益,但凡看github上的开源项目,必有所获,

之前我一直想看那种大型高端项目的源码,但是一方面原理复杂,跟踪困难,另一方面也是自身水平达不到,就如那品茶,没有那个底蕴,再怎么品那也是牛嚼牡丹,暴殄天物.

于是我就决定从一个功能较单一的小项目开始着手.

因为现在我们公司的id生成器是利用雪花算法保证的 所以我就想研究一下id生成器相关的项目

找来找去,就找到了tinyid.

果然受益匪浅!

刚开始看没多久,就发现了一个自己没用过的类,AtomicLong.

查了一下,原来是为了保证原子性.

在32位操作系统中,64位的long 和 double 变量由于会被JVM当作两个分离的32位来进行操作,所以不具有原子性。而使用AtomicLong能让long的操作保持原子型。

 

再往下看,发现了AbstractRoutingDataSource这个类,经百度得知,这个类是用来动态切换数据源的.

那么,我们在这里停顿一下,如果让我们自己来做一个动态切换数据源的功能.我们要怎么做呢?

很显然,我们很容易想到要根据一个key值来选择数据源.

细化一下,也就是根据传进来的key值,动态的从数据源池里获得对应的数据源,建立连接,并返回.

看一下这个类的源码,也是这样的,不谋而合.

获得key的方法是抽象的,由子类实现.提供了数据源池的set方法,本身并未初始化.完美

由于实现了InitializingBean这个接口,在实现afterPropertiesSet方法的时候,把该初始化的都初始化了一下.完美.

每天进步一点点.

posted @ 2019-04-03 22:00  天糊十三幺  阅读(881)  评论(0编辑  收藏  举报