我们就来画这样一个图,然后来谈一下多数据源,多数据源你们有没有遇到过的,这是你们做架构师必备的知识,不是很难,
多数据源的一个应用场景,用的还真的比较广泛的,公司分为两个数据库,一个数据库是专门用来存储共同的数据库文件的,
一个数据库是做垂直业务的数据库,外层加了缓存的,不用担心性能问题,垂直拆分和水平拆分,水平分表,水平分库,你们可能
大型互联网公司的时候,垂直是根据业务划分具体的数据库,你就当成公司里有两套数据库就行了,在一个项目中有多个数据源,
你们知道一个项目中最多有多少个数据源吗,数据源就是JDBC连接,是不同库的JDBC连接,不是不同的JDBC,在一个JDBC中有多个
数据源,是不同库的JDBC,是连接不同库的JDBC,你们知道最多能有多少个数据源吗,其实是可以无限大,订单,商品,不同的库,
你们知道当时有多少个JDBC连接吗,最高峰的时候是24个,因为项目太大了,只要你内存足就行了,所以本身是无限大,但是具体多少,
根据你的内存,我是8G的开到24个数据源,就是连接了24个库,多数据源如何划分,比如你在一个项目当中,业务肯定是根据包来的,
所以在这边我做两种,根据分包来的,不同业务他的模块包肯定不同,那么分包是根据什么来的,是不是业务来的,分包名进行区分的,
这个你们肯定都没有用过的,根据注解方式的,使用注解方式划分多数据源,我先讲分包进行区分,那这两种哪种用的更多呢,他有
各自有点,一般来说分包是用的最多的,因为他不用频繁加注解,加注解太麻烦了,你还要加注解表示指向哪个数据源,所以说一下他的
原理是怎样的呢,比如
com.learn.test01
然后这里再建一个包
com.learn.test02
那么test01他指的是什么,相当于指向datasource01,我可以把它指向datasource01,如果是test02这个下面的,访问数据库的话,
他是不是指向datasource2,我觉得这种方式用的比较广泛,你们知道这种方式类似于什么,类似于多个不同的jar包,这种方式是
什么意思,我把这个包打成jar包,你们会发现,如果你用过开源框架的时候,开源框架里面也是连数据库的,它里面是通过jar包
使用的,也是通过包名进行区分,类似于不同的jar包,是不同的业务需求,多个不同的业务需求,存放到同一个项目中去,就是把不同
项目的业务模块,只是我们没有打包,打包其实分开的,不打包是在一起,在这个地方我们说一下注解的原理,注解方式用的不多,
假设我现在这service层,如果我有多个数据源的情况下,自己定义了一个注解,自己写个注解,假设这个注解是我自己写的,
@DataSource(ref="datasource1"),在里面指定一下,你要用哪个数据源,我想用datasource1,那么这个方法里面,就会直接
读的datasource1,如果你想改成datasource2的话,用datasource2这个数据源,这种注解方式,其实是什么呢,
是我们内部写的,并不是开源的,通过AOP拦截,我取出datasource2的情况下,我就给你获取到datasource2的连接,
但是这种用法不多,特麻烦,为什么特别麻烦呢,如果我有1000个方法,1000个方法都要加这个指向,所以我还是觉得分包会好一点