一、创建三个数据库,三个数据库中都有一个User表
.三个数据库中分别建表
create table user
(
id bigint not null primary key,
name varchar(255) null
);
二、配置MyCat服务
1.下载mycat
地址:http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
2.解压下载包,目录如下
3.修改主要配置文件schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1">
<table name="user" dataNode="dn1,dn2,dn3" rule="mod-long" splitTableNames ="false"/>
</schema>
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost1" database="db2" />
<dataNode name="dn3" dataHost="localhost1" database="db3" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="jdbc:mysql://localhost:3306" user="root" password="123456"></writeHost>
</dataHost>
</mycat:schema>
规则:
<schema>:表示的是在mycat中的逻辑库配置,逻辑库名称为:TESTDB
<table>:表示在mycat中的逻辑表配置,逻辑表名称为:user,映射到两个数据库节点dataNode中,切分规则为:rule1(在rule.xml配置)
<dataNode>:表示数据库节点,这个节点不一定是单节点,可以配置成读写分离.
<dataHost>:真实的数据库的地址配置
<heartbeat>:用户心跳检测
<writeHost>:写库的配置
复制高版本的mysql-connector-java到mycat安装目录
然后启动服务:
./bin/startup_nowrap.sh
三、Springboot配置
1、application.yml中配置数据源
mybatis:
mapper-locations: classpath:mapping/*Mapper.xml
type-aliases-package: com.wisea.tp.entity
spring:
datasource:
url: jdbc:mysql://192.168.29.128:8066/TESTDB
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password:
2、创建实体类,以操作数据库
package com.wisea.tp.entity;
import org.apache.ibatis.type.Alias;
@Alias("User")
@Date
public class User {
private Long id;
private String name;
}
3、编写Dao
package com.wisea.tp.mapper;
import com.wisea.tp.entity.User;
import java.util.List;
public interface UserMapper {
List<User> findList();
int insert(User user);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wisea.tp.mapper.UserMapper">
<select id="findList" resultType="User">
select * from user
</select>
<insert id="insert" parameterType="User">
insert into user(ID,NAME)
values (#{id},#{name})
</insert>
</mapper>
4.编写Controller
package com.wisea.tp.controller;
import com.wisea.tp.entity.User;
import com.wisea.tp.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserMapper userMapper;
@RequestMapping("/list")
public List<User> list() {
return userMapper.findList();
}
@RequestMapping("/add")
public Integer add(User user) {
return userMapper.insert(user);
}
}
四、测试
测试
插入数据:
http://lcoalhost:8080/user/add?id=1&name=jack
http://lcoalhost:8080/user/add?id=2&name=jerry
http://lcoalhost:8080/user/add?id=3&name=tom
…
多插入几条数据,可以发现数据分散到db1、db2、db3的user表了。
转载自:https://blog.csdn.net/chinoukin/article/details/107182491