专栏首页dylanliuSpring boot项目集成Sharding Jdbc

Spring boot项目集成Sharding Jdbc

环境

jdk:1.8 framework: spring boot, sharding jdbc database: MySQL

搭建步骤

  1. 在pom 中加入sharding 依赖
<dependency>
    <groupId>io.shardingjdbc</groupId>
    <artifactId>sharding-jdbc-core-spring-boot-starter</artifactId>
    <version>2.0.3</version>
</dependency>
  1. 将原来的 spring DataSource 注释掉,加入 sharding 的配置
sharding:
  jdbc:
    datasource:
      names: ds_0,ds_1
      ds_0:
           type: com.zaxxer.hikari.HikariDataSource
           driver-class-name: com.mysql.jdbc.Driver
           jdbc-url: jdbc:mysql://sharding0
           username: mams_test
           password: mams_test
      ds_1:
           type: com.zaxxer.hikari.HikariDataSource
           driver-class-name: com.mysql.jdbc.Driver
           jdbc-url: jdbc:mysql://sharding1
           username: mams_test
           password: mams_test
    config:
      sharding:
        default-data-source-name: ds_0
        tables:
            task:
                actual-data-nodes: ds_${0..1}.task
                database-strategy:
                    inline:
                        sharding-column: id
                        algorithm-expression: ds_${id % 2}
                key-generator-column-name: id
            reverse_display:
                actual-data-nodes: ds_${0..1}.reverse_display
                database-strategy:
                    inline:
                        sharding-column: task_id
                        algorithm-expression: ds_${task_id % 2}
                key-generator-column-name: id
        props:
            sql.show: true

注: 这个配置只是针对分库,sharding jdbc 还支持读写分离,主从等模式,具体可以看文档sharding jdbc configuration

faq

  1. 只有网友的分享例子,没有文档

sharding jdbc 的链接 shardingjdbc.io 访问是不可用的,在码云上找到了一份文档,地址是sharding-jdbc-doc

  1. spring boot的 health check 显示为down

看了一下 DataSourceHealthIndicator 类的实现,要求 select 1 返回的大小为 1才认为数据库是健康的,但是经过分库之后,这个list size 应该了是数据库的数量,所以显示数据库为down。

可以将db 个health check关掉,配置management.health.db.enabled=false 即可。

不过这种情况下数据库如果挂掉的话注册中心是不知道的,需要定制一个自己的数据库检查类

@Component
public class CustomDataSourceHealthCheck extends AbstractHealthIndicator {
    private JdbcTemplate jdbcTemplate;
    private String databases;
    private int databaseCount;
    private String query = "SELECT 1 ";

    @PostConstruct
    public void init() {
        databaseCount = databases.split(",").length;
    }

    @Override
    protected void doHealthCheck(Health.Builder builder) throws Exception {
        try {
            List<Map<String, Object>> result = jdbcTemplate.queryForList(query);

            if (result.size() == databaseCount) {
                builder.up();
            } else {
                builder.down();
            }
        } catch (Exception e) {
            builder.down(e);
        }
    }

    public JdbcTemplate getJdbcTemplate() {
        return jdbcTemplate;
    }

    @Autowired
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public String getDatabases() {
        return databases;
    }

    @Value("${sharding.jdbc.datasource.names}")
    public void setDatabases(String databases) {
        this.databases = databases;
    }

    public int getDatabaseCount() {
        return databaseCount;
    }

    public void setDatabaseCount(int databaseCount) {
        this.databaseCount = databaseCount;
    }

    public String getQuery() {
        return query;
    }

    public void setQuery(String query) {
        this.query = query;
    }
}

参考资料

  1. Spring Boot Actuator: Health check, Auditing, Metrics gathering and Monitoring
  2. Spring Boot Actuator Database Health Check
  3. Spring Boot+MyBatis+MySql+Sharding-JDBC实现分库分表

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • AOP概念与术语

    AspectOriented Programing,面向切面编程。

    Dylan Liu
  • 不要使用 YYYY ,使用 yyyy 来获取年份

    使用format 出来的日期的正确的,不要欢喜的太早,parse 给出的结果就完全让人摸不着头脑。

    Dylan Liu
  • 设计原则之接口分离原则(ISP)

    单一职责原则倾向于设计视角,接口分离原则倾向于实现视角,二者看起来非常相似,但是在某些方面还是有所区别的。

    Dylan Liu
  • ShardingSphere之Sharding-JDBC与SpringBoot的集成

    飞狗
  • 从人类理解的角度解读HoloLens

    本文来自Fourth Workshop on ComputerVision for AR/VR的一篇演讲,演讲者是微软科学合作伙伴总监Jamie Shotton...

    用户1324186
  • springboot多数据源配置和使用

    这个直接把多个数据库连接信息写上即可,用spring.datasource属性进行配置,如下:

    用户7634691
  • Cypress学习5-table表格元素(别名使用Aliasing)

    页面上有些元素定位路径比较复杂,可以先定位到该元素使用别名,通过这个别名去操作元素,这样看起来简洁一些。

    上海-悠悠
  • CICD(三)Ansible常用模块以及案例

    alexhuiwang
  • 剁手族福音——亚马逊新款Fire平板曝光

    镁客网
  • Web 前端颜色值--字体--使用,整理整理

    颜色值 CSS 颜色使用组合了红绿蓝颜色值 (RGB) 的十六进制 (hex) 表示法进行定义。对光源进行设置的最低值可以是 0(十六进制 00)。最高值是 2...

    书童小二

扫码关注云+社区

领取腾讯云代金券