轻量级读写分离的技术组件 MyRWSplit

Apache
Java
跨平台
2017-04-27
强子1985

一个轻量级读写分离的技术组件,抛开各种复杂无用的技术概念,直击问题本质,从最本质的技术角度解决问题.

基于Mybatis-3.4.2 + 插件技术 + Druid-1.0.29 + mysql-connector-java-5.1.41。

网址:  

http://git.oschina.net/qiangzigege/MyRWSplit

 

产品简介

1)设置数据源格式  

       value="jdbc:mysql://[1.1.1.1:3306,2.2.2.2:3306,3.3.3.3:3306]/ambari?zeroDateTimeBehavior=convertToNull" />

第1个IP:Port为master,剩下的是slave

2)读写规则

2.1)开启事务--->走master

2.2) 未开启事务

2.2.1)增/修/删 --->走master

2.2.2)查询,指定hint /FORCE_MASTER/ --->走master输入图片说明

2.2.3)查询,未指定hint ---> 走slave,轮询每个slave,取第1个可用的connection

代码片段

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() {
            @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);

    }
}
的码云指数为
超过 的项目
加载中

评论(4)

强子1985
强子1985 软件作者
下载下来跑一遍就行了,超级简单
j
james
为什么没有写测试实例,没有数据库的sql
金贞花
金贞花
@强子哥哥 https://git.oschina.net/Gelopa/sharding-quickstart
开源中国首席渣男
开源中国首席渣男
这个好像可以拿来试试

MyRWSplit 0.3 发布,读写分离工具

轻量级读写分离客户端 MyRWSplit 0.3 版本发布了。本次更新: 修复高版本mysql针对ssl的连接属性设置 修复同一session内连续执行同样的mapper方法有的查询走缓存不走DB MyRWSplit 是一个轻量级...

2017/11/04 15:42

轻量级读写分离客户端 MyRWSplit 0.2 版发布

轻量级读写分离客户端 MyRWSplit 0.2 版发布了。本次更新: 1)完善非事务型的构造方法 2)增加获取connection的耗时审计 3)增加sql执行耗时审计,方便定位系统瓶颈 只要把这些数据抛给MyEye的...

2017/05/01 09:30

轻量级读写分离客户端 MyRWSplit 0.1 版发布

一个轻量级 读写分离 的技术组件,基于Mybatis-3.4.2 + 插件技术 + Druid-1.0.29 + mysql-connector-java-5.1.41。 产品简介 1)设置数据源格式 <property name="url"           ...

2017/04/27 18:41

没有更多内容

加载失败,请刷新页面

没有更多内容

暂无问答

暂无博客

返回顶部
顶部