程序用于 poc 测试时造一些简单的并发读、写以及转账等场景
程序中使用 dbcp 连接池,程序使用的配置文件 dbcp.properties 为连接池使用的一些 jdbc 连接信息。
########DBCP配置文件##########
#驱动名
driverClassName=com.mysql.jdbc.Driver
#url
url=jdbc:mysql://192.168.1.201:3306/test?useSSL=false
#用户名
username=root
#密码
password=root
#初试连接数
initialSize=30
#最大活跃数
maxTotal=30
#最大idle数
maxIdle=10
#最小idle数
minIdle=5
#最长等待时间(毫秒)
maxWaitMillis=1000
#程序中的连接不使用后是否被连接池回收
#removeAbandoned=true
removeAbandonedOnMaintenance=true
removeAbandonedOnBorrow=true
#连接在所指定的秒数内未使用才会被删除(秒)
removeAbandonedTimeout=5
将程序打包,使用java -jar
的方式调用 jar 包,唯一参数为配置文件路径
执行该操作后会在配置文件中指定的库下创建名为 people 的表:
已有该表的话会被 drop 后重建
2.并发插入
执行该操作并根据提示输入后向表中连续并发插入数据,数据内容除 seq 字段递增其他都由 java-faker 随机生成:
数据内容如下:
获取当前 people 表总记录数
并发多次查询 country 字段为随机值的记录数(可能为 0):
查询内容如下:
people 表原索引如下:
执行操作 5 后:
删除 idx_birth 和 idx_country 两个索引
增加名为 balance 的列,默认值为 10000.00(若已有该列则所有记录的 balance 值全部重置为 10000.00)
原表结构:
新增列后:
初始化前:
初始化后:
删除 balance 列
多事务并发转账,保证一致性(人均余额并发转账前后不变)
转帐前:
转账后:
执行该操作后会首先初始化一张如下的商品表:
按照提示继续执行,每个线程开启事务模拟抢购,由于 g_store 字段属性为 usigned:
商品库存为 0 后剩余线程会失败,事务回滚
退出程序
所有的并发操作最后会返回本次操作的 TPS、QPS和耗时等信息