目录
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:824)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:237)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138)
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364)
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206)
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476)
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561)
at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115)
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)
at org.apache.shardingsphere.shardingjdbc.jdbc.adapter.AbstractDataSourceAdapter.createDatabaseType(AbstractDataSourceAdapter.java:76)
at org.apache.shardingsphere.shardingjdbc.jdbc.adapter.AbstractDataSourceAdapter.createDatabaseType(AbstractDataSourceAdapter.java:65)
at org.apache.shardingsphere.shardingjdbc.jdbc.adapter.AbstractDataSourceAdapter.<init>(AbstractDataSourceAdapter.java:53)
我的这个报错原因很明显是数据库连接失败
1.检查数据库服务是否正常启动,没启动,起来就好了
2.检查本地和数据库地址的网络通信,能否正常连接
3.确保你的信息(包括主机名、端口号、用户名和密码)正确,并且与 MySQL 服务器上相应的用户授权匹配。
大致就是这几种检查方式,都检查完没问题,基本就解决了
shardingjdbc介绍
Sharding-JDBC 是一个开源的 Java 数据库中间件,它提供了分库分表的功能,可以帮助应用程序轻松地实现数据库的水平扩展和数据分片。下面是 Sharding-JDBC 的一些主要好处和使用场景:
好处:
-
数据库水平扩展:Sharding-JDBC 允许将数据分散到多个数据库节点中,实现数据库的水平扩展。通过分库分表,可以有效地提高数据库的容量和性能。
-
高性能和负载均衡:Sharding-JDBC 可以根据配置规则将请求路由到正确的数据库节点上,从而实现负载均衡。它还支持读写分离,可以将读操作分发到不同的节点上,提高数据库的读取性能。
-
透明的分片策略:Sharding-JDBC 提供了丰富的分片策略,包括精确分片、范围分片和哈希分片等。开发人员只需要简单地配置分片规则,Sharding-JDBC 就会自动处理分片逻辑,对应用程序来说是透明的。
-
简化的开发和维护:使用 Sharding-JDBC 可以将数据分片的逻辑与业务逻辑解耦,开发人员无需手动处理数据分片的复杂性。此外,它还提供了自动化的数据迁移和扩容功能,简化了数据库的维护过程。
使用场景:
-
大数据量应用:当应用程序需要处理大规模数据集时,Sharding-JDBC 可以将数据分散到多个数据库节点上,提高查询性能和吞吐量。
-
高并发应用:当应用程序需要处理大量并发请求时,Sharding-JDBC 可以将请求分发到不同的数据库节点上,实现负载均衡和水平扩展。
-
SaaS(软件即服务)应用:当构建多租户的 SaaS 应用时,Sharding-JDBC 可以根据租户 ID 将数据分散到不同的数据库中,确保租户之间的数据隔离。
总之,Sharding-JDBC 是一个强大的数据库中间件,适用于需要实现数据库水平扩展和数据分片的应用程序。它可以提高数据库的性能和可伸缩性,简化开发和维护工作。
下面是我的配置文件内容:
application.yml
spring:
application:
name: test-data
mvc:
pathmatch:
matching-strategy: ANT_PATH_MATCHER
profiles:
active: test
logging:
config: classpath:log4j.xml
application-local.yml
server:
port: 8091
servlet:
context-path: /data
eureka:
client:
#表示是否将自己注册进EurekaServer默认为true
register-with-eureka: true
#是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
fetch-registry: true
service-url:
defaultZone: http://localhost:8078/eureka/
instance:
prefer-ip-address: true
instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}
appname: ${spring.application.name}
customer:
url: http://localhost:8091/data
spring:
shardingsphere:
datasource:
names: test-data
test-data:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbcUrl: jdbc:mysql://localhost:3306/test-data?useUnicode=true&characterEncoding=UTF-8
username: root
password: root
type: com.zaxxer.hikari.HikariDataSource
sharding:
# 配置分表策略:根据split_no作为分片的依据(分片键)
tables:
t_sequence:
# groovy脚本->{}
actual-data-nodes: test-data.t_sequence_$->{0..1}
table-strategy:
inline:
sharding-column: split_no
algorithm-expression: t_sequence_$->{split_no%2}
props:
sql:
show: true
build.gradle
implementation("org.apache.shardingsphere:sharding-jdbc-spring-boot-starter:4.1.1")
了解详细代码可查看springboot+shardingjdbc(只分表、不分库)_spring cloud 只分表不分库-CSDN博客