照着网上的配置,使用ShardingSphere分表,一开始就从错误学起,总会有些问题,才能搞明白正确的路应该怎么走。
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.1.1</version>
</dependency>
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'shardingDataSource' threw exception; nested exception is java.lang.RuntimeException: Failed to get driver instance for jdbcUrl=jdbc:mysql://127.0.0.1:3306/qq?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:652)
... 21 common frames omitted
Caused by: java.lang.RuntimeException: Failed to get driver instance for jdbcUrl=jdbc:mysql://127.0.0.1:3306/qq?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
at com.zaxxer.hikari.util.DriverDataSource.<init>(DriverDataSource.java:114)
at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:325)
at com.zaxxer.hikari.pool.PoolBase.<init>(PoolBase.java:114)
at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:108)
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)
at org.apache.shardingsphere.shardingjdbc.jdbc.core.datasource.ShardingDataSource.<init>(ShardingDataSource.java:52)
at org.apache.shardingsphere.shardingjdbc.api.ShardingDataSourceFactory.createDataSource(ShardingDataSourceFactory.java:48)
at org.apache.shardingsphere.shardingjdbc.spring.boot.SpringBootConfiguration.shardingDataSource(SpringBootConfiguration.java:103)
at org.apache.shardingsphere.shardingjdbc.spring.boot.SpringBootConfiguration$$EnhancerBySpringCGLIB$$2d780b89.CGLIB$shardingDataSource$1(<generated>)
at org.apache.shardingsphere.shardingjdbc.spring.boot.SpringBootConfiguration$$EnhancerBySpringCGLIB$$2d780b89$$FastClassBySpringCGLIB$$f431a14b.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
at org.apache.shardingsphere.shardingjdbc.spring.boot.SpringBootConfiguration$$EnhancerBySpringCGLIB$$2d780b89.shardingDataSource(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
... 22 common frames omitted
Caused by: java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getDriver(DriverManager.java:315)
at com.zaxxer.hikari.util.DriverDataSource.<init>(DriverDataSource.java:106)
... 42 common frames omitted
调试跟踪可以看到数据。
这个是初始化的时候
使用Sharding-JDBC加密数据,这篇文章提到的过于复杂,其实出现最大的问题,是我忘了引入
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
按如下配置,服务器可以启动,但尚未增加分表功能。
spring:
shardingsphere:
datasource:
names: qq1
qq1:
type: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://127.0.0.1:3306/fay?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
username: root
# password: 35fed383e0b1d874b057a8a101e4c8da
password: '123456'
minIdle: 20
maxPoolSize: 200
minPoolSize: 20
poolName: Retail_HikariCP
maintenanceIntervalMilliseconds: 30000
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
connectionTestQuery: SELECT 1
#数据库脱敏配置
encrypt:
encryptors:
aes_encryptor:
type: aes
props:
aes:
key:
value: 'qq12_*()_hikari*'
props:
sql:
show: false
query:
with:
cipher:
column: true