SpringBoot和Mycat动态数据源项目整合
SpringBoot项目整合动态数据源(读写分离)
1.配置多个数据源,根据业务需求访问不同的数据,指定对应的策略:增加,删除,修改操作访问对应数据,查询访问对应数据,不同数据库做好的数据一致性的处理。由于此方法相对易懂,简单,不做过多介绍。
2. 动态切换数据源,根据配置的文件,业务动态切换访问的数据库:此方案通过Spring的AOP,AspactJ来实现动态织入,通过编程继承实现Spring中的AbstractRoutingDataSource,来实现数据库访问的动态切换,不仅可以方便扩展,不影响现有程序,而且对于此功能的增删也比较容易。
3. 通过mycat来实现读写分离:使用mycat提供的读写分离功能,mycat连接多个数据库,数据源只需要连接mycat,对于开发人员而言他还是连接了一个数据库(实际是mysql的mycat中间件),而且也不需要根据不同 业务来选择不同的库,这样就不会有多余的代码产生。
详细参考配置
动态数据源核心配置
在Spring 2.0.1中引入了AbstractRoutingDataSource, 该类充当了DataSource的路由中介, 能有在运行时, 根据某种key值来动态切换到真正的DataSource上。
1.项目中需要集成多个数据源分别为读和写的数据源,绑定不同的key。
2.采用AOP技术进行拦截业务逻辑层方法,判断方法的前缀是否需要写或者读的操作
3.如果方法的前缀是写的操作的时候,直接切换为写的数据源,反之切换为读的数据源
也可以自己定义注解进行封装
项目中有两个数据源 分别为读和写的数据源
使用AOP技术判断业务逻辑方法的前缀,如果前缀为比如select get find等。直接走RoutingDataSource
如果是写的话,传递一个key给RoutingDataSource指明使用写的数据源
下面是两个数据源,读的数据源和写的数据源。都需要设置一个key。然后注册存放到RoutingDataSource。
使用AOP技术拦截业务逻辑层的方法,判断方法的前缀是否为读或者写的操作
如果是写的操作,会给RoutingDataSource传递一个key 哈哈懂得了吧
环境配置:
1.创建读和写的数据源
2.将读和写的数据源注册到RoutiongDataSource
3.使用AOP技术拦截业务逻辑层,判断方法的前缀是否需要做读或者写
pom:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>