开卷必有益,但凡看github上的开源项目,必有所获,
之前我一直想看那种大型高端项目的源码,但是一方面原理复杂,跟踪困难,另一方面也是自身水平达不到,就如那品茶,没有那个底蕴,再怎么品那也是牛嚼牡丹,暴殄天物.
于是我就决定从一个功能较单一的小项目开始着手.
因为现在我们公司的id生成器是利用雪花算法保证的 所以我就想研究一下id生成器相关的项目
找来找去,就找到了tinyid.
果然受益匪浅!
刚开始看没多久,就发现了一个自己没用过的类,AtomicLong.
查了一下,原来是为了保证原子性.
在32位操作系统中,64位的long 和 double 变量由于会被JVM当作两个分离的32位来进行操作,所以不具有原子性。而使用AtomicLong能让long的操作保持原子型。
再往下看,发现了AbstractRoutingDataSource这个类,经百度得知,这个类是用来动态切换数据源的.
那么,我们在这里停顿一下,如果让我们自己来做一个动态切换数据源的功能.我们要怎么做呢?
很显然,我们很容易想到要根据一个key值来选择数据源.
细化一下,也就是根据传进来的key值,动态的从数据源池里获得对应的数据源,建立连接,并返回.
看一下这个类的源码,也是这样的,不谋而合.
获得key的方法是抽象的,由子类实现.提供了数据源池的set方法,本身并未初始化.完美
由于实现了InitializingBean这个接口,在实现afterPropertiesSet方法的时候,把该初始化的都初始化了一下.完美.
每天进步一点点.