轻量级读写分离客户端 MyRWSplit 0.2 版发布了。本次更新: 1)完善非事务型的构造方法 2)增加获取connection的耗时审计 3)增加sql执行耗时审计,方便定位系统瓶颈 只要把这些数据抛给MyEye的http://git.oschina.net/qiangzigege/MyEye的myeye_metrics_client(埋点jar包),就可以完成sql审计,myeye_metrics_client已经内置同一条sql模板自动merge功能。 PS:根据实际经验,myeye_metrics_client的API模型可以用于任何你想监控的点,比如我们之前曾经用于监控(url,rpc的方法,cache的命令,数据库的sql,消息队列的积压情况)等。 网址: http://git.oschina.net/qiangzigege/MyRWSplit ======================产品介绍================================ 一个轻量级 读写分离 的技术组件,基于Mybatis-3.4.2 + 插件技术 + Druid-1.0.29 + mysql-connector-java-5.1.41。 产品简介 设置数据源格式 <property name="url" value="jdbc:mysql://{1.1.1.1:3306,2.2.2.2:3306,3.3.3.3:3306}/ambari?zeroDateTimeBehavior=convertToNull" /> 第1个IPort为master,剩下的是slave 代码片段 1)事务片段 package transaction; import org.apache.ibatis.session.SqlSession; import com.freedom.mysql.myrwsplit.bean.Role; import com.freedom.mysql.myrwsplit.helper.LoggerHelper; import com.freedom.mysql.myrwsplit.interfaces.RoleMapper; import com.freedom.mysql.myrwsplit.runnable.MyRwSplitTransactionRunnable; public class MyRwSplitWithTransactionAdvanced { private static LoggerHelper LOGGER = LoggerHelper.getLogger(MyRwSplitWithTransactionAdvanced.class); public static void main(String[] args) { // 初始化时,请设定你需要的参数,比如:Executor类型,是否自动提交,事务级别 Role result = new MyRwSplitTransactionRunnable<Role>() { @Override public Role execute(SqlSession sqlSession) { // 从这里,开始写任何你需要的的业务代码, // 处于一个事务里,事务相关的东西,业务不需要关心,框架已经做好了 RoleMapper userMapper = sqlSession.getMapper(RoleMapper.class);// 获得mapper // delete Role role = new Role(); role.setId(13); userMapper.deleteRole(role); // insert role.setId(13); role.setTitle("xxx"); role.setAuthor("yyy"); userMapper.insertRole(role); // select role = userMapper.getRole0(11); return role; } }.run(); // LOGGER.debug("" + result); } } 2)非事务片段 package notransaction; import com.freedom.mysql.myrwsplit.bean.Role; import com.freedom.mysql.myrwsplit.helper.LoggerHelper; import com.freedom.mysql.myrwsplit.helper.MapperUtils; import com.freedom.mysql.myrwsplit.interfaces.RoleMapper; public class MyRwSplitWithNoTransactionAdvanced { @SuppressWarnings("unused") private static LoggerHelper LOGGER = LoggerHelper.getLogger(MyRwSplitWithNoTransactionAdvanced.class); // 在读写分离的情况下,必须重新获取mapper,才可以支持每次操作都重新判断来决定从master/slave来获取新的连接 // 如果连续运行就会报错 public static void main(String[] args) { // RoleMapper mapper = MapperUtils.getMapper(RoleMapper.class); Role role = mapper.getRole0(13); // mapper = MapperUtils.getMapper(RoleMapper.class); role = new Role(); role.setAuthor("xxx"); role.setTitle("yyy"); mapper.insertRole(role); } } 轻量级读写分离客户端 MyRWSplit 0.2 版发布下载地址