Sharding-JDBC多数据源配置并实现读写分离

Sharding-JDBC多数据源配置并实现读写分离

  • 官方简介
  • hikari数据源
    • pom.xml
    • application.yml
  • druid数据源
    • pom.xml
    • application.yml

官方简介

官方文档
定位为轻量级Java框架,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。

  • 适用于任何基于JDBC的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。
  • 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。
  • 支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92标准的数据库。

Sharding-JDBC多数据源配置并实现读写分离_第1张图片

hikari数据源

Hikari是一款非常强大,高效,并且号称“史上最快连接池”。并且在springboot2.0之后,采用的默认数据库连接池就是Hikari。不需要引入依赖,已经在SpringBoot中包含了。

pom.xml

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

<dependency>
    <groupId>io.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>3.1.0</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

application.yml

sharding:
  jdbc:
    datasource:
      names: ds0,ds1
      ds0:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.jdbc.Driver
        jdbc-url: jdbc:mysql://172.20.***.***:3306/lasa_parking?useSSL=false&characterEncoding=UTF-8&serverTimezone=GMT%2B8
        username: ***
        password: ***
        hikari:
          maximum-pool-size: 60
          idle-timeout: 60000
          connection-timeout: 60000
          validation-timeout: 3000
          max-lifetime: 60000
          login-timeout: 5
          minimum-idle: 10
      ds1:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.jdbc.Driver
        jdbc-url: jdbc:mysql://172.20.***.***:3306/lasa_parking?useSSL=false&characterEncoding=UTF-8&serverTimezone=GMT%2B8
        username: ***
        password: ***
        hikari:
          maximum-pool-size: 60
          idle-timeout: 60000
          connection-timeout: 60000
          validation-timeout: 3000
          max-lifetime: 60000
          login-timeout: 5
          minimum-idle: 10
    config:
      masterslave:
        load-balance-algorithm-type: round_robin
        name: dataSource
        master-data-source-name: ds0
        slave-data-source-names: ds1
      props:
        sql.show: true

druid数据源

pom.xml

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>

application.yml

sharding:
  jdbc:
    datasource:
      names: ds0,ds1
      ds0:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://114.116.90.192:3306/lasa_parking?useSSL=false&characterEncoding=UTF-8&serverTimezone=GMT%2B8
        username: root
        password: Guoyi1234!@#
        name: master-datasource
        initialSize: 20
        maxActive: 60
        maxWait: 60000
        minEvictableIdleTimeMillis: 300000
        timeBetweenEvictionRunsMillis: 60000
        keepAlive: true
        validationQuery: SELECT 1 FROM DUAL
        minIdle: 20
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        filters: stat,wall,log4j
        useGlobalDataSourceStat: true
        connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
      ds1:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://114.116.90.192:3306/parking_lasa?useSSL=false&characterEncoding=UTF-8&serverTimezone=GMT%2B8
        username: root
        password: Guoyi1234!@#
        # 配置监控中心显示的datasource名称
        name: slave-datasource
        # 启动程序时,在连接池中初始化多少个连接
        initialSize: 20
        # 连接池中最多支持多少个活动会话
        maxActive: 60
        # 程序向连接池中请求连接时,超过maxWait的值后,认为本次请求失败,即连接池没有可用连接,单位毫秒,设置-1时表示无限等待
        maxWait: 60000
        # 池中某个连接的空闲时长达到 N 毫秒后, 连接池在下次检查空闲连接时,将回收该连接,要小于防火墙超时设置
        minEvictableIdleTimeMillis: 300000
        # 检查空闲连接的频率,单位毫秒, 非正整数时表示不进行检查
        timeBetweenEvictionRunsMillis: 60000
        # 程序没有close连接且空闲时长超过 minEvictableIdleTimeMillis,则会执行validationQuery指定的SQL,以保证该程序连接不会池kill掉,其范围不超过minIdle指定的连接个数。
        keepAlive: true
        # 检查池中的连接是否仍可用的 SQL 语句,drui会连接到数据库执行该SQL, 如果正常返回,则表示连接可用,否则表示连接不可用
        validationQuery: SELECT 1 FROM DUAL
        # 回收空闲连接时,将保证至少有minIdle个连接.
        minIdle: 20
        # 空闲时检测连接是否有效。(高效)
        testWhileIdle: true
        # 程序 申请 连接时,进行连接有效性检查(低效,影响性能)
        testOnBorrow: false
        # 程序 返还 连接时,进行连接有效性检查(低效,影响性能)
        testOnReturn: false
        # 缓存通过以下两个方法发起的SQL:public PreparedStatement prepareStatement(String sql);public PreparedStatement prepareStatement(String sql,int resultSetType, int resultSetConcurrency)
        poolPreparedStatements: true
        # 每个连接最多缓存多少个SQL
        maxPoolPreparedStatementPerConnectionSize: 20
        # 配置监监控统计: filter:stat;日志监控: filter:log4j 或者 slf4j;防御SQL注入: filter:wall
        filters: stat,wall,log4j
        # 合并多个DruidDataSource的监控数据
        useGlobalDataSourceStat: true
        # 连接属性。比如设置一些连接池统计方面的配置。
        connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
    config:
      masterslave:
        load-balance-algorithm-type: round_robin
        name: dataSource
        master-data-source-name: ds0
        slave-data-source-names: ds1
      props:
        sql.show: true

你可能感兴趣的:(mysql,mysql,数据库)