Apache ShardingSphere是一款开源的分布式数据库中间件组成的生态圈。它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(规划中)这3款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。
pom,注意springboot版本
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.2</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.dcqc</groupId> <artifactId>shardingspere</artifactId> <version>0.0.1-SNAPSHOT</version> <name>shardingspere</name> <description>shardingspere</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>4.1.1</version> </dependency> <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-namespace</artifactId> <version>4.0.0-RC1</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.8.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.23</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.1</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
application.yml
spring: shardingsphere: datasource: #配置真实数据源 names: ds0,ds1,ds2 ds0: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/quarant-db?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=UTC username: root password: admin type: com.zaxxer.hikari.HikariDataSource initialSize: 5 minIdle: 10 maxActive: 50 maxWait: 60000 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 maxEvictableIdleTimeMillis: 900000 validationQuery: SELECT 1 FROM DUAL ds1: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://42.109.52.255:3307/quarant_db?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=UTC username: root password: admin type: com.zaxxer.hikari.HikariDataSource initialSize: 5 minIdle: 10 maxActive: 50 maxWait: 60000 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 maxEvictableIdleTimeMillis: 900000 validationQuery: SELECT 1 FROM DUAL ds2: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://172.18.11.9:3316/quarant_db?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=UTC username: root password: Dcqc@1234 type: com.zaxxer.hikari.HikariDataSource initialSize: 5 minIdle: 10 maxActive: 50 maxWait: 60000 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 maxEvictableIdleTimeMillis: 900000 validationQuery: SELECT 1 FROM DUAL sharding: master-slave-rules: master-test0: # 哪一个主节点 master-datasource-name: ds0 # 指定主节点名字 slave-data-source-names: ds0,ds1,ds2 # 指定读节点名字,多个读节点用逗号分开 # 配置从库选择策略,提供轮询与随机,这里选择用轮询 masterslave: load-balance-algorithm-type: round_robin props: sql: show: true # 日志显示SQL server: port: 9092
controller
import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.dcqc.shardingspere.entity.QuarantineInfo; import com.dcqc.shardingspere.service.QuarantineInfoService; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class QuarantController { private final QuarantineInfoService quarantineInfoService; @GetMapping("/update") public void update() { QuarantineInfo quarantineInfo = new QuarantineInfo(); quarantineInfo.setName("石劲鹏"); Boolean bb = quarantineInfoService.update(quarantineInfo, new LambdaQueryWrapper<QuarantineInfo>() .eq(QuarantineInfo::getId, 53)); } @GetMapping("/query") public String query() { QuarantineInfo quarantineInfo = quarantineInfoService.getById(53); return JSON.toJSONString(quarantineInfo); } }