65

Spring Boot中整合Sharding-JDBC实现读写分离

 5 years ago
source link: https://www.ydstudio.net/archives/93.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

国庆期间研究了数据库中间件例如Mycat和Sharding JDBC,Sharding-jdbc和Mycat使用不同的理念,Sharding-jdbc目前是基于Jdbc驱动,无需额外的proxy,因此也无需关注proxy本身的高可用。Mycat 是基于 Proxy,它复写了 MySQL 协议,将 Mycat Server 伪装成一个 MySQL 数据库,而 Sharding-JDBC 是基于 JDBC 接口的扩展,是以jar包的形式提供轻量级服务的。

先介绍一下整合过程中用到的主要软件的版本:

Spring Boot: 1.5.8.RELEASE
Sharding-JDBC: 2.0.3

注意:实现读写分离我们自己要先配置好MySQL的主从复制,我自己已经配置好了一主两从。配置的步骤可以参考【实现MySQL主从复制】

pom.xml 依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>io.shardingjdbc</groupId>
            <artifactId>sharding-jdbc-core-spring-boot-starter</artifactId>
            <version>2.0.3</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
</dependencies>

application配置文件

server.port=8080

sharding.jdbc.datasource.names=ds_master,ds_slave_1,ds_slave_2

# 主数据源
sharding.jdbc.datasource.ds_master.type=com.alibaba.druid.pool.DruidDataSource
sharding.jdbc.datasource.ds_master.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds_master.url=jdbc:mysql://localhost:3306/db1?characterEncoding=utf-8
sharding.jdbc.datasource.ds_master.username=root
sharding.jdbc.datasource.ds_master.password=123456
sharding.jdbc.datasource.ds_master.maxPoolSize=20

# 从数据源 ds_slave_1
sharding.jdbc.datasource.ds_slave_1.type=com.alibaba.druid.pool.DruidDataSource
sharding.jdbc.datasource.ds_slave_1.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds_slave_1.url=jdbc:mysql://localhost:3307/db1?characterEncoding=utf-8
sharding.jdbc.datasource.ds_slave_1.username=root
sharding.jdbc.datasource.ds_slave_1.password=123456
sharding.jdbc.datasource.ds_slave_1.maxPoolSize=20

# 从数据源 ds_slave_2
sharding.jdbc.datasource.ds_slave_2.type=com.alibaba.druid.pool.DruidDataSource
sharding.jdbc.datasource.ds_slave_2.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds_slave_2.url=jdbc:mysql://localhost:3308/db1?characterEncoding=utf-8
sharding.jdbc.datasource.ds_slave_2.username=root
sharding.jdbc.datasource.ds_slave_2.password=123456
sharding.jdbc.datasource.ds_slave_2.maxPoolSize=20

# 读写分离配置
sharding.jdbc.config.masterslave.load-balance-algorithm-type=round_robin
sharding.jdbc.config.masterslave.name=dataSource
sharding.jdbc.config.masterslave.master-data-source-name=ds_master
sharding.jdbc.config.masterslave.slave-data-source-names=ds_slave_1,ds_slave_2


mybatis.config-location=classpath:mybatis-config.xml
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.typeAliasesPackage=net.ydstuio.shardingjdbc.repository

到此,Sharing-Jdbc的读写分离就已经就配置好了,看看是不是很简单。如果对数据的及时性要求很高,可以使用下面的代码,使得读取也落到主库上。

// 强制路由主库
HintManager.getInstance().setMasterRouteOnly();

最后更新于 2018-10-06 16:02:59 并被添加「java sharding-jdbc」标签,已有 1 位童鞋阅读过。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK