bboyjing's blog

Mysql分库分表之Mycat学习笔记四【新建Java测试项目】

之前已经把Mycat环境准备完毕,现在我们新建个Java项目,用于后面的测试。项目使用SpringBoot和Mybatis,SpringBot搭一下很容易,但是官方没有提供mybatis starter,不过maven仓库有,下面就贴一下核心配置。

Mybatis在SpringBoot中的配置

pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<dependencies>
...
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.18</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>
...
</dependencies>

application.properties

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
...
#mybatis
mybatis.config-location=classpath:/mybatis-config.xml
#jdbc with druid configurations
spring.datasource.name=OrderDB
spring.datasource.url=jdbc:mysql://localhost:8066/OrderDB
spring.datasource.username=root
spring.datasource.password=bboyjing
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.initial-size=1
spring.datasource.max-wait=600000
spring.datasource.min-idle=1
spring.datasource.time-between-eviction-runs-millis=60000
spring.datasource.min-evictable-idle-time-millis=300000
spring.datasource.validation-query=select 1
spring.datasource.test-while-idle=true
spring.datasource.test-on-borrow=false
spring.datasource.test-on-return=false
spring.datasource.pool-prepared-statements=true
spring.datasource.max-open-prepared-statements=20
...

mybatis-config.xml

1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>

mapper

1
2
3
4
5
6
7
8
9
10
@Mapper
public interface OrderMapper {
@Select("select * from `order`")
List<Order> findOrder();
}
@Data
public class Order{
}

test

1
2
3
4
5
6
7
8
9
10
11
12
13
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MycatTestApplication.class)
@WebAppConfiguration
public class MycatTest {
@Autowired
private OrderMapper orderMapper;
@Test
public void findOrderTest(){
List<Order> orderList = orderMapper.findOrder();
System.out.println(orderList.size());
}
}

一个简单的测试项目就搭建完了,项目在放在Github上,仅供参考。

Mycat全局序列号

准备插入的2000w条记录是以id mod计算的,会涉及到全局ID,所以这里要穿插讲下第二章没有讲的Mycat全局序列号,目前的版本包含本地配置和数据库配置等多种实现方式。几种方式各有优缺点,就不一一说明,但是如果有条件的话还是自己写一个独立的ID生成服务。为了测试方便,我们挑一个简单的本地文件方式来讲下。

本地文件方式

修改server.xml

在system标签下添加如下属性,0表示本地文件方式

1
2
3
4
5
<system>
...
<property name="sequnceHandlerType">0</property>
...
</system>

配置sequence.properties文件

在conf/sequence.properties中添加如下配置:

1
2
3
4
5
6
7
8
#表示使用过的历史分段,一般无特殊需要课不设置
ORDER.HISIDS=
#最小ID值
ORDER.MINID=1
#最大ID值
ORDER.MAXID=1000000000
#当前ID值
ORDER.CURID=0

代码中通过next value for MYCATSEQ_ORDER即可

本地文件方式有个很大的缺点,当Mycat重新发布后,配置文件中的sequence会恢复到初始值,但是后面经过测试,Mycat重启之后,依然能记住当前值,可能我还没理解这个重新发布的意思。