当前位置:网站首页>Shardingsphere's level table practice (III)
Shardingsphere's level table practice (III)
2022-07-29 03:14:00 【Melting pole】
summary
Set up the environment
Springboot2.3.2.RELEASE + Tkmybatis + Sharding-jdbc + Druid
pom.xml
<?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.3.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.study</groupId>
<artifactId>shardingjdbcdemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>shardingjdbcdemo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<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>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.14</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.20</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.0.0-RC1</version>
</dependency>
<!-- tkmybatis -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.1.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
Building database 、 Build table
library 、 Table design :
- Create database course_db.
- Create two tables in the database course_1 and course_2.
- Rules of engagement : If you add a course id It is an even number that adds data to course_1, Add odd numbers to course_2.
New database course_db.
new table course_1 and course_2.
CREATE TABLE `course_1` (
`cid` bigint(20) NOT NULL,
`cname` varchar(50) NOT NULL,
`user_id` bigint(20) NOT NULL,
`cstatus` varchar(10) NOT NULL,
PRIMARY KEY (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
The code structure

package com.study.shardingjdbcdemo.entity;
import lombok.Data;
@Data
public class Course {
@Id
private Long cid;
private String cname;
@Column(name = "user_id")
private Long userId;
private String cstatus;
}
package com.study.shardingjdbcdemo.mapper;
import com.study.shardingjdbcdemo.entity.Course;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;
@Repository
public interface CourseMapper extends Mapper<Course> {
}
package com.study.shardingjdbcdemo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.study.shardingjdbcdemo.mapper")
public class ShardingjdbcdemoApplication {
public static void main(String[] args) {
SpringApplication.run(ShardingjdbcdemoApplication.class, args);
}
}
package com.study.shardingjdbcdemo;
import com.study.shardingjdbcdemo.mapper.CourseMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class ShardingjdbcdemoApplicationTests {
@Autowired
private CourseMapper courseMapper;
@Test
void contextLoads() {
}
}
To configure Sharding-JDBC Fragmentation strategy
application.properties
# Configure fragmentation strategy
# Configure data sources
spring.shardingsphere.datasource.names=m1
spring.shardingsphere.datasource.m1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.m1.url=jdbc:mysql://localhost:3306/course_db?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.m1.username=root
spring.shardingsphere.datasource.m1.password=123456
# Appoint course Table distribution , Which database is the configuration table in , What are the table names
spring.shardingsphere.sharding.tables.course.actual-data-nodes=m1.course_$->{
1..2}
# Appoint course Primary key cid Generation strategy SNOWFLAKE
spring.shardingsphere.sharding.tables.course.key-generator.column=cid
spring.shardingsphere.sharding.tables.course.key-generator.type=SNOWFLAKE
# Specify the fragmentation policy , cid Is an even number added to course_1 In the table ,cid Is an odd number added to course_2
spring.shardingsphere.sharding.tables.course.table-strategy.inline.sharding-column=cid
spring.shardingsphere.sharding.tables.course.table-strategy.inline.algorithm-expression=course_$->{
cid % 2 + 1}
# open sql Output log
spring.shardingsphere.props.sql.show=true
test
The test case
package com.study.shardingjdbcdemo;
import com.study.shardingjdbcdemo.entity.Course;
import com.study.shardingjdbcdemo.mapper.CourseMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class ShardingjdbcdemoApplicationTests {
@Autowired
private CourseMapper courseMapper;
@Test
void add() {
for (int i = 0; i < 10; i++) {
Course course = new Course();
course.setCname("java");
course.setUserId(100L);
course.setCstatus("normal");
// Pay attention to insertSelective, Otherwise, an error will be reported , because sharding-jdbc The primary key field will be generated and spliced into sql in , If sql Statement with cid The primary key will repeatedly report errors
courseMapper.insertSelective(course);
}
}
@Test
void query() {
List<Course> courses = courseMapper.selectAll();
courses.forEach(System.out::println);
}
}
Test error
The bean 'dataSource', defined in class path resource [org/apache/shardingsphere/shardingjdbc/spring/boot/SpringBootConfiguration.class], could not be registered. A bean with that name has already been defined in class path resource [com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceAutoConfigure.class] and overriding is disabled.
Action:
Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true
Solution
application.properties Add configuration in
# Solve a problem Course The problem that entity classes cannot correspond to two tables
spring.main.allow-bean-definition-overriding=true
边栏推荐
- Calculation of array serial number of force deduction questions (daily question 7/28)
- Redis配置缓存过期监听事件触发
- kubernetes-1.24.x 特性
- 带你来浅聊一下,单商户功能模块汇总
- Algorithm --- paint the house (kotlin)
- C和指针 第3章 语义“陷阱” 3.5 空指针并非字符串
- Li Shuo, vice president of Baidu: it's a good thing that China's labor costs rise with the support of digital technology
- 百度副总裁李硕:数字技术加持下中国劳动力成本上升是好事
- 三子棋(玩家+电脑)
- Self study notes on Apache file management -- mapping folders and configuring Apache virtual machines based on single IP and multi domain names
猜你喜欢

Apache文件管理自学笔记——映射文件夹和基于单ip多域名配置apache虚拟机

C语言基础知识点汇总

Photo scale correction tool: DxO viewpoint 3 direct mount version

"PHP Basics" output approximate value of PI

The Federal Reserve raised interest rates again, Powell "let go of doves" at 75 basis points, and US stocks reveled

Design of smoke temperature, humidity and formaldehyde monitoring based on single chip microcomputer

万字详解 Google Play 上架应用标准包格式 AAB

During the year, the first "three consecutive falls" of No. 95 gasoline returned to the "8 Yuan era"“

Unity game special effects

2.nodejs--路径(_dirname,_filname)、url网址、querystring模块、mime模块、各种路径(相对路径)、网页的加载(面试题*)
随机推荐
【C】数组
Algorithm --- paint the house (kotlin)
"PHP Basics" output approximate value of PI
VIM common commands
Apache文件管理自学笔记——映射文件夹和基于单ip多域名配置apache虚拟机
Inventory of domestic and foreign project collaborative management software: SAAS and customization become a trend
Wechat's crazy use of glide - life cycle learning
Several methods of converting object to string
逐步分析类的拆分之案例——五彩斑斓的小球碰撞
IDEA安装后无法启动
Chapter 2 VRP command line
04 | 后台登录:基于账号密码的登录方式(上)
接口自动化测试实践指导(上):接口自动化需要做哪些准备工作
Verilog: blocking assignment and non blocking assignment
MySql的安装配置超详细教程与简单的建库建表方法
2022-07-28 顾宇佳 学习笔记
ShardingSphere之水平分表实战(三)
C traps and defects Chapter 3 semantic "traps" 3.9 integer overflow
MySQL流程控制之while、repeat、loop循环实例分析
正则表达绕过waf