Mycat
下载
1 | wget http://dl.mycat.io/1.6.7.3/20190927161129/Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz |
配置
server.xml,Mycat服务器配置,默认端口8066
1 |
|
schema.xml,Mycat和Mysql节点映射配置1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--Mycat数据库名-->
<schema name="mycat_test" checkSQLschema="true" sqlMaxLimit="100">
<!--Mycat表名,节点名称列表-->
<table name="mycat_test_student" dataNode="dn1,dn2"/>
</schema>
<!--Mycat节点名称、节点地址、mysql数据库名-->
<dataNode name="dn1" dataHost="localhost1" database="db01" />
<dataNode name="dn2" dataHost="localhost1" database="db02" />
<!--Mycat节点地址-->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- mysql数据库服务器、账户、密码 -->
<writeHost host="hostM1" url="192.168.1.71:3306" user="test"
password="test@1234">
</writeHost>
</dataHost>
</mycat:schema>
Spring Boot
数据源配置
1 | //mycat连接信息 |
Mybatis
mybatis.xml插件配置1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<configuration>
<settings>
<!-- 打印查询语句 -->
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
<typeAliases>
<typeAlias alias="TestPojo" type="xx.xx.TestPojo"/>
</typeAliases>
<!-- 拦截器插件,改写sql -->
<plugins>
<plugin interceptor="xx.interceptor.MyInterceptor">
</plugin>
</plugins>
</configuration>
拦截器
1 | //拦截StatementHandler的prepare方法 |
总结
以上为关键实现,主要过程如下:
- 搭建Mycat服务,设置提供的数据库信息
- 配置Mycat动态映射的两个节点,Mycat根据sql语句中的
/*!mycat:datanode=dn1*/
进行动态切换数据源后执行sql - 配置SpringBoot的Mycat数据源连接
- 配置Mybatis的拦截器插件
- 配置Mybatis拦截器实现,根据上下文节点,改写sql
注意
- 生产可采用Mycat集群,集群用ZK管理,以动态实例化数据源