我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作者、产品软文专业写手、技术文章评审老师、问卷调查设计师、个人社区创始人、开源项目贡献者。跑过十五公里、徒步爬过衡山、有过三个月减肥20斤的经历、是个喜欢躺平的狠人。
拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、Spring MVC、SpringCould、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RockerMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。
有过从0到1的项目高并发项目开发与管理经验,对JVM调优、MySQL调优、Redis调优 、ElasticSearch调优、消息中间件调优、系统架构调优都有着比较全面的实战经验。
有过云端搭建服务器环境,自动化部署CI/CD,弹性伸缩扩容服务器(最高200台),了解过秒级部署(阿里云的ACK和华为云的云容器引擎CCE)流程,能独立开发和部署整个后端服务,有过分库分表的实战经验。
经过多年在CSDN创作上千篇文章的经验积累,我已经拥有了不错的写作技巧,与清华大学出版社签下了四本书籍的合约,并将陆续在明年出版。这些书籍包括了基础篇、进阶篇、架构篇的《Java项目实战—深入理解大型互联网企业通用技术》,以及《解密程序员的思维密码–沟通、演讲、思考的实践》。具体出版计划会根据实际情况进行调整,希望各位读者朋能够多多支持!
阅读前,快速浏览目录和章节概览可帮助了解文章结构、内容和作者的重点。了解自己希望从中获得什么样的知识或经验是非常重要的。建议在阅读时做笔记、思考问题、自我提问,以加深理解和吸收知识。
在这个美好的时刻,本人不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。
在pom.xml中添加依赖
<!-- Maven 构建配置 -->
<build>
<!-- 插件列表 -->
<plugins>
<!-- Maven 编译插件 -->
<plugin>
<!-- 插件所在 groupId -->
<groupId>org.apache.maven.plugins</groupId>
<!-- 插件所在 artifactId -->
<artifactId>maven-compiler-plugin</artifactId>
<!-- 插件配置 -->
<configuration>
<!-- 源码编译版本 -->
<source>8</source>
<!-- 目标编译版本 -->
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<!-- Maven 依赖管理配置 -->
<dependencyManagement>
<!-- 依赖列表 -->
<dependencies>
<!-- Spring Boot 依赖管理 -->
<dependency>
<!-- 依赖所在 groupId -->
<groupId>org.springframework.boot</groupId>
<!-- 依赖所在 artifactId -->
<artifactId>spring-boot-dependencies</artifactId>
<!-- 依赖版本 -->
<version>2.3.1.RELEASE</version>
<!-- 依赖类型 -->
<type>pom</type>
<!-- 依赖范围 -->
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 项目依赖列表 -->
<dependencies>
<!-- 分库分表组件 Sharding JDBC -->
<dependency>
<!-- 依赖所在 groupId -->
<groupId>org.apache.shardingsphere</groupId>
<!-- 依赖所在 artifactId -->
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<!-- 依赖版本 -->
<version>4.1.1</version>
</dependency>
<!-- Spring Boot 核心依赖 -->
<dependency>
<!-- 依赖所在 groupId -->
<groupId>org.springframework.boot</groupId>
<!-- 依赖所在 artifactId -->
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- Spring Boot 测试依赖 -->
<dependency>
<!-- 依赖所在 groupId -->
<groupId>org.springframework.boot</groupId>
<!-- 依赖所在 artifactId -->
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- 数据源连接池组件 Druid -->
<dependency>
<!-- 依赖所在 groupId -->
<groupId>com.alibaba</groupId>
<!-- 依赖所在 artifactId -->
<artifactId>druid</artifactId>
<!-- 依赖版本 -->
<version>1.1.22</version>
</dependency>
<!-- MySQL 驱动依赖 -->
<dependency>
<!-- 依赖所在 groupId -->
<groupId>mysql</groupId>
<!-- 依赖所在 artifactId -->
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- MyBatis-Plus 集成依赖 -->
<dependency>
<!-- 依赖所在 groupId -->
<groupId>com.baomidou</groupId>
<!-- 依赖所在 artifactId -->
<artifactId>mybatis-plus-boot-starter</artifactId>
<!-- 依赖版本 -->
<version>3.0.5</version>
</dependency>
</dependencies>
扫描对应的mapper路径
@MapperScan("com.example.shardingDemo.mapper")
@SpringBootApplication
public class ShardingJDBCApplication {
public static void main(String[] args) {
SpringApplication.run(ShardingJDBCApplication.class,args);
}
}
# 哈希分片策略
# 设置数据源名称为 m1
spring.shardingsphere.datasource.names=m1
# 设置数据源类型为 Druid 数据源
spring.shardingsphere.datasource.m1.type=com.alibaba.druid.pool.DruidDataSource
# 设置数据源驱动为 MySQL 的 JDBC 驱动
spring.shardingsphere.datasource.m1.driver-class-name=com.mysql.cj.jdbc.Driver
# 设置数据源连接 URL,连接本地 MySQL 数据库的 coursedb 库
spring.shardingsphere.datasource.m1.url=jdbc:mysql://192.168.122.128:3306/masterdemo?serverTimezone=GMT%2B8
# 设置连接数据库所需的用户名和密码
spring.shardingsphere.datasource.m1.username=root
spring.shardingsphere.datasource.m1.password=bfb8f36cc2616995
# 设置分片表的实际数据节点,对应两个数据表:m1.t_course_1 和 m1.t_course_2
spring.shardingsphere.sharding.tables.course.actual-data-nodes=m1.t_course_$->{1..2}
# 设置分片键为 cid
spring.shardingsphere.sharding.tables.course.key-generator.column=cid
# 设置分布式 ID 生成算法为 SNOWFLAKE 算法,worker ID 为 1
spring.shardingsphere.sharding.tables.course.key-generator.type=SNOWFLAKE
# Spring Boot 应用配置项:ShardingSphere 分库分表配置之课程表的主键生成策略配置项,属性名: worker.id,属性值: 1 (表示该应用程序所使用的 Snowflake 算法的工作节点 ID 为 1)
spring.shardingsphere.sharding.tables.course.key-generator.props.worker.id=1
# 设置分表算法为 inline 分片算法,分片列为 cid,分片规则为课程编号为奇数的记录在 m1.t_course_1 表中,课程编号为偶数的记录在 m1.t_course_2 表中
spring.shardingsphere.sharding.tables.course.table-strategy.inline.sharding-column=cid
# table-strategy.inline:表示使用内联表达式的分片策略。lgorithm-expression:表示表名生成算法表达式。t_course_$->{cid%2+1}:表示生成的表名,即t_course_后面接下标为(cid%2+1)的表。
# cid是表中的一个自增主键,%2表示对2取余数,+1表示取余结果加1,即cid值为偶数进入到t_course_1表,cid值为奇数进入到t_course_2表。
spring.shardingsphere.sharding.tables.course.table-strategy.inline.algorithm-expression=t_course_$->{cid%2+1}
# 设置 SQL 显示开启,方便调试
spring.shardingsphere.props.sql.show=true
# 允许覆盖 Bean 定义,用于调试时快速更新配置
spring.main.allow-bean-definition-overriding=true
public class Course {
private Long cid;
private String cname;
private Long userId;
private String cstatus;
//省略get/set方法了
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.shardingDemo.entity.Course;
import com.example.shardingDemo.entity.Dict;
import com.example.shardingDemo.entity.User;
import com.example.shardingDemo.mapper.CourseMapper;
import com.example.shardingDemo.mapper.DictMapper;
import com.example.shardingDemo.mapper.UserMapper;
import org.apache.shardingsphere.api.hint.HintManager;
import org.junit.Test;
import org.junit.jupiter.api.Tags;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
public class ShardingJDBCTest {
@Resource
CourseMapper courseMapper;
@Test
public void addCourse(){
for(int i = 0 ; i < 10 ; i ++){
Course c = new Course();
c.setCid(Long.valueOf(i));
c.setCname("shardingsphere");
c.setUserId(Long.valueOf(""+(1000+i)));
c.setCstatus("1");
courseMapper.insert(c);
}
}
}
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.3.1.RELEASE)
2023-11-08 18:02:14.029 INFO 11092 --- [ main] c.e.a.ShardingJDBCTest : Starting ShardingJDBCTest on WIN-20230222ULN with PID 11092 (started by Administrator in E:\WarkSpace\基础篇书籍\第8章\apache-shardingsphere-demo)
2023-11-08 18:02:14.032 INFO 11092 --- [ main] c.e.a.ShardingJDBCTest : No active profile set, falling back to default profiles: default
2023-11-08 18:02:14.414 INFO 11092 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'stringToNoneShardingStrategyConfigurationConverter' of type [org.apache.shardingsphere.spring.boot.converter.StringToNoneShardingStrategyConfigurationConverter] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-11-08 18:02:14.422 INFO 11092 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.shardingsphere.sharding-org.apache.shardingsphere.shardingjdbc.spring.boot.sharding.SpringBootShardingRuleConfigurationProperties' of type [org.apache.shardingsphere.shardingjdbc.spring.boot.sharding.SpringBootShardingRuleConfigurationProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-11-08 18:02:14.422 INFO 11092 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.shardingsphere.masterslave-org.apache.shardingsphere.shardingjdbc.spring.boot.masterslave.SpringBootMasterSlaveRuleConfigurationProperties' of type [org.apache.shardingsphere.shardingjdbc.spring.boot.masterslave.SpringBootMasterSlaveRuleConfigurationProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-11-08 18:02:14.426 INFO 11092 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.shardingsphere.encrypt-org.apache.shardingsphere.shardingjdbc.spring.boot.encrypt.SpringBootEncryptRuleConfigurationProperties' of type [org.apache.shardingsphere.shardingjdbc.spring.boot.encrypt.SpringBootEncryptRuleConfigurationProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-11-08 18:02:14.426 INFO 11092 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.shardingsphere.shadow-org.apache.shardingsphere.shardingjdbc.spring.boot.shadow.SpringBootShadowRuleConfigurationProperties' of type [org.apache.shardingsphere.shardingjdbc.spring.boot.shadow.SpringBootShadowRuleConfigurationProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-11-08 18:02:14.430 INFO 11092 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.shardingsphere-org.apache.shardingsphere.shardingjdbc.spring.boot.common.SpringBootPropertiesConfigurationProperties' of type [org.apache.shardingsphere.shardingjdbc.spring.boot.common.SpringBootPropertiesConfigurationProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-11-08 18:02:14.549 INFO 11092 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.apache.shardingsphere.shardingjdbc.spring.boot.SpringBootConfiguration' of type [org.apache.shardingsphere.shardingjdbc.spring.boot.SpringBootConfiguration$$EnhancerBySpringCGLIB$$f2dcf3ef] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-11-08 18:02:14.736 INFO 11092 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited
2023-11-08 18:02:15.200 INFO 11092 --- [ main] o.a.s.core.log.ConfigurationLogger : ShardingRuleConfiguration:
tables:
course:
actualDataNodes: m1.t_course_$->{1..2}
keyGenerator:
column: cid
props:
worker.id: '1'
type: SNOWFLAKE
logicTable: course
tableStrategy:
inline:
algorithmExpression: t_course_$->{cid%2+1}
shardingColumn: cid
2023-11-08 18:02:15.200 INFO 11092 --- [ main] o.a.s.core.log.ConfigurationLogger : Properties:
sql.show: 'true'
2023-11-08 18:02:15.208 INFO 11092 --- [ main] ShardingSphere-metadata : Loading 1 logic tables' meta data.
2023-11-08 18:02:15.254 INFO 11092 --- [ main] ShardingSphere-metadata : Loading 8 tables' meta data.
2023-11-08 18:02:15.285 INFO 11092 --- [ main] ShardingSphere-metadata : Meta data load finished, cost 85 milliseconds.
_ _ |_ _ _|_. ___ _ | _
| | |\/|_)(_| | |_\ |_)||_|_\
/ |
3.0.5
2023-11-08 18:02:15.391 WARN 11092 --- [ main] c.b.m.core.toolkit.TableInfoHelper : Warn: Could not find @TableId in Class: com.example.apacheshardingspheredemo.entity.Course.
2023-11-08 18:02:15.466 WARN 11092 --- [ main] c.b.m.core.toolkit.TableInfoHelper : Warn: Could not find @TableId in Class: com.example.apacheshardingspheredemo.entity.Dict.
2023-11-08 18:02:15.479 WARN 11092 --- [ main] c.b.m.core.toolkit.TableInfoHelper : Warn: Could not find @TableId in Class: com.example.apacheshardingspheredemo.entity.User.
2023-11-08 18:02:15.577 INFO 11092 --- [ main] c.e.a.ShardingJDBCTest : Started ShardingJDBCTest in 1.698 seconds (JVM running for 2.242)
2023-11-08 18:02:15.949 INFO 11092 --- [ main] ShardingSphere-SQL : Logic SQL: INSERT INTO course ( cid,
cname,
user_id,
cstatus ) VALUES ( ?,
?,
?,
? )
2023-11-08 18:02:15.949 INFO 11092 --- [ main] ShardingSphere-SQL : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@7ab1ad9, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@5ee6fdc4), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@5ee6fdc4, columnNames=[cid, cname, user_id, cstatus], insertValueContexts=[InsertValueContext(parametersCount=4, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=64, stopIndex=64, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=67, stopIndex=67, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=70, stopIndex=70, parameterMarkerIndex=2), ParameterMarkerExpressionSegment(startIndex=73, stopIndex=73, parameterMarkerIndex=3)], parameters=[0, shardingsphere, 1000, 1])], generatedKeyContext=Optional[GeneratedKeyContext(columnName=cid, generated=false, generatedValues=[0])])
2023-11-08 18:02:15.949 INFO 11092 --- [ main] ShardingSphere-SQL : Actual SQL: m1 ::: INSERT INTO t_course_1 ( cid,
cname,
user_id,
cstatus ) VALUES (?, ?, ?, ?) ::: [0, shardingsphere, 1000, 1]
2023-11-08 18:02:15.966 INFO 11092 --- [ main] ShardingSphere-SQL : Logic SQL: INSERT INTO course ( cid,
cname,
user_id,
cstatus ) VALUES ( ?,
?,
?,
? )
2023-11-08 18:02:15.966 INFO 11092 --- [ main] ShardingSphere-SQL : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@7ab1ad9, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@43fd77d8), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@43fd77d8, columnNames=[cid, cname, user_id, cstatus], insertValueContexts=[InsertValueContext(parametersCount=4, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=64, stopIndex=64, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=67, stopIndex=67, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=70, stopIndex=70, parameterMarkerIndex=2), ParameterMarkerExpressionSegment(startIndex=73, stopIndex=73, parameterMarkerIndex=3)], parameters=[1, shardingsphere, 1001, 1])], generatedKeyContext=Optional[GeneratedKeyContext(columnName=cid, generated=false, generatedValues=[1])])
2023-11-08 18:02:15.966 INFO 11092 --- [ main] ShardingSphere-SQL : Actual SQL: m1 ::: INSERT INTO t_course_2 ( cid,
cname,
user_id,
cstatus ) VALUES (?, ?, ?, ?) ::: [1, shardingsphere, 1001, 1]
2023-11-08 18:02:15.966 INFO 11092 --- [ main] ShardingSphere-SQL : Logic SQL: INSERT INTO course ( cid,
cname,
user_id,
cstatus ) VALUES ( ?,
?,
?,
? )
2023-11-08 18:02:15.966 INFO 11092 --- [ main] ShardingSphere-SQL : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@7ab1ad9, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@32ba5c65), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@32ba5c65, columnNames=[cid, cname, user_id, cstatus], insertValueContexts=[InsertValueContext(parametersCount=4, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=64, stopIndex=64, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=67, stopIndex=67, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=70, stopIndex=70, parameterMarkerIndex=2), ParameterMarkerExpressionSegment(startIndex=73, stopIndex=73, parameterMarkerIndex=3)], parameters=[2, shardingsphere, 1002, 1])], generatedKeyContext=Optional[GeneratedKeyContext(columnName=cid, generated=false, generatedValues=[2])])
2023-11-08 18:02:15.966 INFO 11092 --- [ main] ShardingSphere-SQL : Actual SQL: m1 ::: INSERT INTO t_course_1 ( cid,
cname,
user_id,
cstatus ) VALUES (?, ?, ?, ?) ::: [2, shardingsphere, 1002, 1]
2023-11-08 18:02:15.971 INFO 11092 --- [ main] ShardingSphere-SQL : Logic SQL: INSERT INTO course ( cid,
cname,
user_id,
cstatus ) VALUES ( ?,
?,
?,
? )
2023-11-08 18:02:15.971 INFO 11092 --- [ main] ShardingSphere-SQL : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@7ab1ad9, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@702f4124), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@702f4124, columnNames=[cid, cname, user_id, cstatus], insertValueContexts=[InsertValueContext(parametersCount=4, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=64, stopIndex=64, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=67, stopIndex=67, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=70, stopIndex=70, parameterMarkerIndex=2), ParameterMarkerExpressionSegment(startIndex=73, stopIndex=73, parameterMarkerIndex=3)], parameters=[3, shardingsphere, 1003, 1])], generatedKeyContext=Optional[GeneratedKeyContext(columnName=cid, generated=false, generatedValues=[3])])
2023-11-08 18:02:15.971 INFO 11092 --- [ main] ShardingSphere-SQL : Actual SQL: m1 ::: INSERT INTO t_course_2 ( cid,
cname,
user_id,
cstatus ) VALUES (?, ?, ?, ?) ::: [3, shardingsphere, 1003, 1]
2023-11-08 18:02:15.975 INFO 11092 --- [ main] ShardingSphere-SQL : Logic SQL: INSERT INTO course ( cid,
cname,
user_id,
cstatus ) VALUES ( ?,
?,
?,
? )
2023-11-08 18:02:15.975 INFO 11092 --- [ main] ShardingSphere-SQL : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@7ab1ad9, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@22ff1372), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@22ff1372, columnNames=[cid, cname, user_id, cstatus], insertValueContexts=[InsertValueContext(parametersCount=4, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=64, stopIndex=64, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=67, stopIndex=67, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=70, stopIndex=70, parameterMarkerIndex=2), ParameterMarkerExpressionSegment(startIndex=73, stopIndex=73, parameterMarkerIndex=3)], parameters=[4, shardingsphere, 1004, 1])], generatedKeyContext=Optional[GeneratedKeyContext(columnName=cid, generated=false, generatedValues=[4])])
2023-11-08 18:02:15.975 INFO 11092 --- [ main] ShardingSphere-SQL : Actual SQL: m1 ::: INSERT INTO t_course_1 ( cid,
cname,
user_id,
cstatus ) VALUES (?, ?, ?, ?) ::: [4, shardingsphere, 1004, 1]
2023-11-08 18:02:15.975 INFO 11092 --- [ main] ShardingSphere-SQL : Logic SQL: INSERT INTO course ( cid,
cname,
user_id,
cstatus ) VALUES ( ?,
?,
?,
? )
2023-11-08 18:02:15.975 INFO 11092 --- [ main] ShardingSphere-SQL : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@7ab1ad9, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@4d825dbe), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@4d825dbe, columnNames=[cid, cname, user_id, cstatus], insertValueContexts=[InsertValueContext(parametersCount=4, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=64, stopIndex=64, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=67, stopIndex=67, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=70, stopIndex=70, parameterMarkerIndex=2), ParameterMarkerExpressionSegment(startIndex=73, stopIndex=73, parameterMarkerIndex=3)], parameters=[5, shardingsphere, 1005, 1])], generatedKeyContext=Optional[GeneratedKeyContext(columnName=cid, generated=false, generatedValues=[5])])
2023-11-08 18:02:15.975 INFO 11092 --- [ main] ShardingSphere-SQL : Actual SQL: m1 ::: INSERT INTO t_course_2 ( cid,
cname,
user_id,
cstatus ) VALUES (?, ?, ?, ?) ::: [5, shardingsphere, 1005, 1]
2023-11-08 18:02:15.979 INFO 11092 --- [ main] ShardingSphere-SQL : Logic SQL: INSERT INTO course ( cid,
cname,
user_id,
cstatus ) VALUES ( ?,
?,
?,
? )
2023-11-08 18:02:15.979 INFO 11092 --- [ main] ShardingSphere-SQL : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@7ab1ad9, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@63814bbe), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@63814bbe, columnNames=[cid, cname, user_id, cstatus], insertValueContexts=[InsertValueContext(parametersCount=4, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=64, stopIndex=64, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=67, stopIndex=67, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=70, stopIndex=70, parameterMarkerIndex=2), ParameterMarkerExpressionSegment(startIndex=73, stopIndex=73, parameterMarkerIndex=3)], parameters=[6, shardingsphere, 1006, 1])], generatedKeyContext=Optional[GeneratedKeyContext(columnName=cid, generated=false, generatedValues=[6])])
2023-11-08 18:02:15.979 INFO 11092 --- [ main] ShardingSphere-SQL : Actual SQL: m1 ::: INSERT INTO t_course_1 ( cid,
cname,
user_id,
cstatus ) VALUES (?, ?, ?, ?) ::: [6, shardingsphere, 1006, 1]
2023-11-08 18:02:15.983 INFO 11092 --- [ main] ShardingSphere-SQL : Logic SQL: INSERT INTO course ( cid,
cname,
user_id,
cstatus ) VALUES ( ?,
?,
?,
? )
2023-11-08 18:02:15.983 INFO 11092 --- [ main] ShardingSphere-SQL : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@7ab1ad9, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@70b196d3), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@70b196d3, columnNames=[cid, cname, user_id, cstatus], insertValueContexts=[InsertValueContext(parametersCount=4, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=64, stopIndex=64, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=67, stopIndex=67, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=70, stopIndex=70, parameterMarkerIndex=2), ParameterMarkerExpressionSegment(startIndex=73, stopIndex=73, parameterMarkerIndex=3)], parameters=[7, shardingsphere, 1007, 1])], generatedKeyContext=Optional[GeneratedKeyContext(columnName=cid, generated=false, generatedValues=[7])])
2023-11-08 18:02:15.983 INFO 11092 --- [ main] ShardingSphere-SQL : Actual SQL: m1 ::: INSERT INTO t_course_2 ( cid,
cname,
user_id,
cstatus ) VALUES (?, ?, ?, ?) ::: [7, shardingsphere, 1007, 1]
2023-11-08 18:02:15.983 INFO 11092 --- [ main] ShardingSphere-SQL : Logic SQL: INSERT INTO course ( cid,
cname,
user_id,
cstatus ) VALUES ( ?,
?,
?,
? )
2023-11-08 18:02:15.983 INFO 11092 --- [ main] ShardingSphere-SQL : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@7ab1ad9, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@72001c71), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@72001c71, columnNames=[cid, cname, user_id, cstatus], insertValueContexts=[InsertValueContext(parametersCount=4, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=64, stopIndex=64, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=67, stopIndex=67, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=70, stopIndex=70, parameterMarkerIndex=2), ParameterMarkerExpressionSegment(startIndex=73, stopIndex=73, parameterMarkerIndex=3)], parameters=[8, shardingsphere, 1008, 1])], generatedKeyContext=Optional[GeneratedKeyContext(columnName=cid, generated=false, generatedValues=[8])])
2023-11-08 18:02:15.983 INFO 11092 --- [ main] ShardingSphere-SQL : Actual SQL: m1 ::: INSERT INTO t_course_1 ( cid,
cname,
user_id,
cstatus ) VALUES (?, ?, ?, ?) ::: [8, shardingsphere, 1008, 1]
2023-11-08 18:02:15.987 INFO 11092 --- [ main] ShardingSphere-SQL : Logic SQL: INSERT INTO course ( cid,
cname,
user_id,
cstatus ) VALUES ( ?,
?,
?,
? )
2023-11-08 18:02:15.987 INFO 11092 --- [ main] ShardingSphere-SQL : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@7ab1ad9, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@7d90644f), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@7d90644f, columnNames=[cid, cname, user_id, cstatus], insertValueContexts=[InsertValueContext(parametersCount=4, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=64, stopIndex=64, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=67, stopIndex=67, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=70, stopIndex=70, parameterMarkerIndex=2), ParameterMarkerExpressionSegment(startIndex=73, stopIndex=73, parameterMarkerIndex=3)], parameters=[9, shardingsphere, 1009, 1])], generatedKeyContext=Optional[GeneratedKeyContext(columnName=cid, generated=false, generatedValues=[9])])
2023-11-08 18:02:15.987 INFO 11092 --- [ main] ShardingSphere-SQL : Actual SQL: m1 ::: INSERT INTO t_course_2 ( cid,
cname,
user_id,
cstatus ) VALUES (?, ?, ?, ?) ::: [9, shardingsphere, 1009, 1]
2023-11-08 18:02:15.995 INFO 11092 --- [extShutdownHook] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} closing ...
2023-11-08 18:02:15.995 INFO 11092 --- [extShutdownHook] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} closed
Disconnected from the target VM, address: '127.0.0.1:52128', transport: 'socket'
可以发现course_1表的cid都是偶数。
可以发现course_2表的cid都是奇数。
为了避免部分同学下载依赖包不一致导致maven依赖下载不下来,我这里给上自己的配置文件,代码如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Maven 的配置文件 -->
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0
http://maven.apache.org/xsd/settings-1.1.0.xsd">
<!-- 设置本地仓库的路径 -->
<localRepository>D:\Java\ReMaven</localRepository>
<!-- 设置镜像 -->
<mirrors>
<mirror>
<id>central</id>
<url>https://repo1.maven.org/maven2/</url>
<mirrorOf>*</mirrorOf>
</mirror>
<!-- 定义一个镜像 -->
<!-- <mirror>
<id>aliyunmaven</id>
<name>Alibaba Maven Mirror</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
-->
<mirror>
<id>aliyunmaven</id><!-- 镜像的id -->
<mirrorOf>*</mirrorOf><!-- 镜像代理的仓库id,这里将中央仓库的地址替换为阿里云的地址 -->
<name>阿里云公共仓库</name><!-- 镜像的名称 -->
<url>https://maven.aliyun.com/repository/public</url><!-- 镜像的地址 -->
</mirror>
</mirrors>
<!-- 设置代理 -->
<proxies></proxies>
<!-- 设置私有仓库的认证信息 -->
<servers></servers>
<!-- 定义构建时添加的环境参数 -->
<profiles>
<!-- 定义一个profile -->
<profile>
<id>jdk-1.8</id> <!-- profile的id -->
<activation> <!-- 激活条件 -->
<activeByDefault>true</activeByDefault> <!-- 默认激活 -->
<jdk>1.8</jdk> <!-- 使用的JDK版本 -->
</activation>
<properties> <!-- 定义环境变量 -->
<maven.compiler.source>1.8</maven.compiler.source> <!-- 编译代码的源版本 -->
<maven.compiler.target>1.8</maven.compiler.target> <!-- 编译代码的目标版本 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- 项目源码的编码方式 -->
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!-- 项目输出的编码方式 -->
<java.version>1.8</java.version> <!-- 使用的Java版本 -->
</properties>
</profile>
</profiles>
<!-- 设置默认激活的环境 -->
<activeProfiles>
<activeProfile>jdk-1.8</activeProfile> <!-- 默认激活的profile -->
</activeProfiles>
</settings>
这里提供一个视频演示,简单讲解一下,视频发布在哔哩哔哩平台上。
快速使用ShardingJDBC的哈希分片策略进行分表
对本篇文章进行总结:
以上就是今天要讲的内容,阅读结束后,反思和总结所学内容,并尝试应用到现实中,有助于深化理解和应用知识。与朋友或同事分享所读内容,讨论细节并获得反馈,也有助于加深对知识的理解和吸收。
如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~
希望各位读者大大多多支持用心写文章的博主,现在时代变了, 信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!
SeniorRD
有需要对自己进行综合性评估,进行职业方向规划,我可以让技术大牛帮你模拟面试、针对性的指导、传授面试技巧、简历优化、进行技术问题答疑等服务。
可访问:https://java_wxid.gitee.io/tojson/