GithubHelp home page GithubHelp logo

chenlei2 / spring-boot-mybatis-rw Goto Github PK

View Code? Open in Web Editor NEW
338.0 46.0 155.0 161 KB

基于mybatis,springboot开箱即用的读写分离插件

License: Apache License 2.0

Java 98.09% TSQL 1.91%
datasource transaction mybatis java read-write-splitting read-write-separation spring-boot-mybatis

spring-boot-mybatis-rw's People

Contributors

chenlei2 avatar henrywendy avatar zhazhanan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

spring-boot-mybatis-rw's Issues

克隆项目运行报错

最近在看springboot mybatis 数据读写分离,想研究下作者的代码。

有两个问题

  • 项目spring-boot-mybatis-rw-sample与项目mybatis-rw-sample-xml都是测试项目吗
  • 克隆项目跑起来报错
    1502176736 1
    1502176761 1
    1502176778 1

ForceWrite怎么用呢?

很好的插件,准备用到项目中,请问如果我要强制走主库,怎么操作?谢谢

集成PageHelper时候抛错

DataSourceProxy类中,
method.invoke(((Map)ConnectionHold.CONNECTION_CONTEXT.get()).get(ConnectionHold.CURRENT_CONNECTION.get()), args);
这里抛错。
at com.github.pagehelper.PageHelper.getUrl(PageHelper.java:282) ~[pagehelper-4.1.1.jar:na]
at com.github.pagehelper.PageHelper.getSqlUtil(PageHelper.java:305) ~[pagehelper-4.1.1.jar:na]
at com.github.pagehelper.PageHelper.initSqlUtil(PageHelper.java:263) ~[pagehelper-4.1.1.jar:na]
at com.github.pagehelper.PageHelper.intercept(PageHelper.java:250) ~[pagehelper-4.1.1.jar:na]

原因是:pageHelper 要依赖connection的DatabaseMetaData。 conn.getMetaData().getURL();
你后续会修复吗?

几个小问题,希望跟作者交流一下。

1、测试发现,DataSourceProxy.java 中调用链如下:
-- method: getAutoCommit
-- method: getTargetConnection
----getTargetConnection---true | 4
-- method: prepareStatement

getAutoCommit 和 getTransactionIsolation 方法,因为没有默认值(没注入)
均会调用下面的getTargetConnection 方法,来先占用一个write(默认,还没到mapper拦截器)的connection

导致写库连接不能被回收。

2、RWManagedTransaction 中的commit,直接对writeCon和readCon 执行commit方法,当方法不配置事务时,connection是autoCommit的,执行会报异常,但是被catch住了。

3、insert.selectKey会被路由到从库 (select类型)
RWPlugin.java
if (mappedStatement.getSqlCommandType() == SqlCommandType.SELECT
&& !mappedStatement.getId().endsWith("!selectKey")) {
key = ConnectionHold.READ;
}

4、建议:
是否考虑抽取一个数据源(目前是用的tomcat jdbc), spring-boot的默认配置,支持type来制定数据源

DataSource不能注入和事务开启后无法切换数据源的问题

1.首先我是在你给的例子上面做的测试
@Bean(name="dataSourceProxy") //@ConditionalOnMissingBean @ConditionalOnBean(name = { "writeDataSource", "readDataSources" }) public DataSource dataSource( @Qualifier("readDataSources") Object readDataSoures, @Qualifier("writeDataSource") Object writeDataSource) { }
DataSource这里如果不把@ConditionalOnMissingBean注解去掉,它就不会实例化。然后,我把它命名为dataSourceProxy,SqlSessionFactory的参数上面加@qualifier("dataSourceProxy")之后才可以正常初始化SqlSessionFactory。
@Bean public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSourceProxy")DataSource dataSource) throws Exception {}
2.还有个比较难办的问题是,假如我同一个方法中既有查询又有更新,并且我在方法上面加了@transactional事务注解,那么,数据源就无法切换。比如我先查询,更新的时候也是走的读库,如果我先更新,那么查询的时候就走写库,主要问题是因为如果开了事务的话,第二次SqlSession开启链接的时候没有再次调用dataSourceProxy.getConnection方法,所以也就没有切换数据源

spring-boot mybatis druid

融入数据库连接池druid

在作者插件基础上,想融入连接池druid,请问作者有好的建议吗

版本问题

建议发布到maven仓库,方便使用,谢谢

日志问题

你们 想问一下 集成这个插件 在执行数据库操作的时候 怎么通过日志输出来获取数据源 是执行的read 还是 write 库的呢,希望通过日志输出来获取到 本次操作的数据库连接地址来确认本次datasource 是正确的额

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.