Skip to the content.

MySplitter 是什么?

[English] [GitHub] [Apache License 2.0]

MySplitter 是一个轻量级 JDBC 中间件,面向读写分离、多数据源路由、高可用、负载均衡和多数据库连接管理。

当前发布版本是 1.1.0。生产默认事务模式仍然是安全的本地 JDBC 事务;同时,1.1.0 引入了带实验开关的 XA 事务 MVP,用于验证跨多个数据源、跨不同数据库品牌的分布式事务能力。

MySplitter 适合解决什么问题?

发布状态

模块 状态
最新版本 1.1.0
Java 基线 Java 8+
Spring Boot Starter Spring Boot 2.7.x
首选连接池 HikariCP
配置格式 YAML
生产默认事务模式 local
实验事务模式 xa,需要 mysplitter.experimental.xa.enabled=true

核心能力

1.1.0 中的实验性 XA

XA 已可用于开发验证,但还不是生产默认能力。

已经实现:

重要限制:

Maven 坐标

核心库:

<dependency>
    <groupId>com.mysplitter</groupId>
    <artifactId>mysplitter</artifactId>
    <version>1.1.0</version>
</dependency>

Spring Boot Starter:

<dependency>
    <groupId>com.mysplitter</groupId>
    <artifactId>mysplitter-spring-boot-starter</artifactId>
    <version>1.1.0</version>
</dependency>

Spring Boot 快速开始

application.yml

spring:
  datasource:
    mysplitter:
      configuration-file: classpath:mysplitter.yml

mysplitter.yml

mysplitter:
  passwordSource: environment
  databasesRoutingHandler: com.example.DatabaseRouter
  readAndWriteParser: com.example.ReadAndWriteParser
  illAlertHandler: com.example.DataSourceIllAlertHandler
  common:
    dataSourceClass: com.zaxxer.hikari.HikariDataSource
    loadBalance:
      read:
        enabled: true
        strategy: polling
        failTimeout: 30s
      write:
        enabled: true
        strategy: polling
        failTimeout: 30s
  databases:
    database-a:
      readers:
        reader-1:
          configuration:
            jdbcUrl: jdbc:mysql://localhost:3306/user
            username: ${DB_USER}
            password: ${DB_PASSWORD}
            driverClassName: com.mysql.cj.jdbc.Driver
            connectionTimeout: 1000
      writers:
        writer-1:
          configuration:
            jdbcUrl: jdbc:mysql://localhost:3306/user
            username: ${DB_USER}
            password: ${DB_PASSWORD}
            driverClassName: com.mysql.cj.jdbc.Driver
            connectionTimeout: 1000

本地开发如果希望明文写在 YAML 中,也可以使用 passwordSource: plain

实验性 XA 配置预览

mysplitter:
  transaction:
    mode: xa
    coordinator:
      type: embedded
      logStore: file
      logFile: ./target/mysplitter-xa.log
    recovery:
      enabled: true
      interval: 10s
  databases:
    database-a:
      writers:
        writer-1:
          configuration:
            jdbcUrl: jdbc:mysql://127.0.0.1:3306/app
            username: ${DB_USER}
            password: ${DB_PASSWORD}
            driverClassName: com.mysql.cj.jdbc.Driver
            xaDataSourceClass: com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
            xaProperties:
              url: jdbc:mysql://127.0.0.1:3306/app?useSSL=false
              user: ${DB_USER}
              password: ${DB_PASSWORD}

启动时显式打开实验开关:

java -Dmysplitter.experimental.xa.enabled=true ...

仓库文档

后续方向