碎碎念
- TimerTask
Timer timer = new Timer(false);
timer.schedule(new RefreshTask(), 10*1000L, 30*1000L);
private class RefreshTask extends TimerTask {
@Override
public void run() {
reflesh();
}
}
reflesh() {
// 拉去权限数据
// 更新缓存数据
}
TimerTask在执行时,如果抛出异常不进行捕获就直接终止,建议使用ScheduledThreadPoolExecutor来替代
- mycat全局表插入的时抛出索引重复
现象是mycat在插入时,抛出了索引重复但是再次查询时,确有数据
原因是因为mycat在查询时候只会随机查询一个分库中的数据,由于不同分库的主键序列不一样,导致每次插入时,id不一样,随后又通过id来进行删除,这样只会删除一个表的数据,导致数据未被删除的库再次插入时抛出索引重复。
- mycat全局表随机选择库
public static String getAliveRandomDataNode(TableConfig tc) {
List<String> randomDns = (List<String>)tc.getDataNodes().clone();
MycatConfig mycatConfig = MycatServer.getInstance().getConfig();
if (mycatConfig != null) {
//将dataNodes随机排列
Collections.shuffle(randomDns);
//省略...满足条件选取第一个dataNode
}
// all fail return default
return tc.getRandomDataNode();
}
- 对重复数据的不同处理在1.6.x上对于重复数据是直接抛出异常,最新的版本则是返回修改值
- 查询端口占用情况
# 端口占用情况
netstat -nap |grep 2181
# 端口连接数
netstat -na | grep 2181 | wc -l