shardingsphere分表

照着网上的配置,使用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

1
调试跟踪可以看到数据。
2
这个是初始化的时候
3

使用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

参考shardingjdbc 实现分库分表
ShardingJDBC 分库分表详解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ShardingSphere是一个开源的分布式数据库中间件,用于处理数据库的分库分表问题。在ShardingSphere中,分表配置是通过配置文件来实现的。 首先,你需要在ShardingSphere的配置文件中指定数据源和数据表的规则。在数据源规则中,你可以配置多个数据源,每个数据源对应一个数据库,可以是主库或者从库。在数据表规则中,你需要指定分表的策略和分表字段。 下面是一个示例的ShardingSphere配置文件中的分表配置部分的示例: ```yaml dataSources: ds0: ... ds1: ... rules: - !SHARDING tables: user: actualDataNodes: ds${0..1}.user_${0..2} tableStrategy: standard: shardingColumn: user_id shardingAlgorithmName: userShardingAlgorithm ... shardingAlgorithms: userShardingAlgorithm: type: INLINE props: algorithm-expression: user_${user_id % 3} ``` 在上面的示例中,我们配置了两个数据源(ds0和ds1),每个数据源对应一个数据库。然后,我们定义了一个user表的分表规则。actualDataNodes指定了实际的数据节点,其中ds${0..1}表示ds0和ds1两个数据源,user_${0..2}表示user_0、user_1和user_2三张真实的数据表。tableStrategy指定了分表策略,这里使用了标准的分表策略,根据user_id字段进行分表,使用了名为userShardingAlgorithm的分表算法。 最后,我们还需要在ShardingSphere中配置userShardingAlgorithm的具体实现,这里使用了INLINE方式,通过取模运算来确定数据表。 以上是一个简单的ShardingSphere分表配置的示例,你可以根据自己的需求进行配置。具体的配置方式还会根据你使用的数据库和ShardingSphere的版本而有所不同,你可以参考ShardingSphere的官方文档来获取更详细的配置信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

warrah

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值