sharding-jdbc官方文档:https://shardingsphere.apache.org/document/legacy/4.x/document/cn/manual/sharding-jdbc/usage/encrypt/
github地址:https://github.com/apache/shardingsphere

hibernate接入

  • 背景
    • sharding-jdbc
      • 加密demo实践
      • 踩过的坑
        • 注意hibernate版本
        • EncryptDataSource初始化失败
        • 连接池初始化卡住
        • 启动后查询失败
        • sharding-jdbc 配置不生效
        • sharding-jdbc 配置后,duplicate for update执行失败

背景

由于国家对于个人信息的不断重视,为防止信息泄露,各企业对于用户信息敏感信息需采取密文形式存储。例如地址、电话号码、银行卡等。对于新业务无论是业务代码中加密、orm层介入、还是sql层介入都会比较简单,没有历史包袱。而对与已经运行良久的历史数据则存在着场景排查复杂、加密中间态持续时间长、失败难回滚等情况。所以需要进行完备的调研与试验。本文调研了sharding-jdbc与orm介入的方式完成数据加密,并进行了demo试验,记录下踩到的坑,希望能提高大家进行相关工作时的效率,不重复踩坑。

sharding-jdbc

sharding-jdbc由当当开源,现已纳入Apache麾下。由字面意思我们也可以看出它是基于jdbc来做的。提供了数据分片、加密等功能。相关介绍就不赘述了,官方文档比较详细。
采用该方式加密的优势在于集成简单,对于业务侵入少,可以快速验证。缺点则是存在性能损耗,不如orm接入直接且有不少坑要踩。

加密demo实践

sharding-jdbc的集成还是挺简单的,只需要引入相关依赖,然后配置yaml文件即可使用。唯一要注意的就是如果使用了spring.datasource则需要去掉相关配置,sharding-jdbc会初始化EncryptDataSource供应用使用。

依赖引入配置:

implementation group: 'org.apache.shardingsphere', name: 'sharding-jdbc-spring-boot-starter', version: '4.1.1'
implementation group: 'org.apache.shardingsphere', name: 'sharding-jdbc-spring-namespace', version: '4.1.1'
implementation group: 'org.springframework', name: 'spring-orm',version: '4.3.10.RELEASE'
implementation group: 'com.alibaba', name: 'druid', version: '1.2.0'

yaml文件配置:

spring:shardingsphere:datasource:names: mysql-perfmysql-perf:type: com.alibaba.druid.pool.DruidDataSourcedriverClassName: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/testusername: devtestpassword: CMcGkJdCwencrypt:encryptors:encryptor_aes:type: aesprops:aes:key:value: 123456tables:user:columns:name:plainColumn: namecipherColumn: name_encodeencryptor: encryptor_aesprops:sql:show: truequery:with:cipher:column: true

datasource植入:

@Configuration
public class HibernateConfig {@Resourceprivate DataSource dataSource;@Autowiredprivate CourseUserProps props;@Beanpublic AnnotationSessionFactoryBean sessionFactory(){AnnotationSessionFactoryBean sessionFactory=new AnnotationSessionFactoryBean();//省略Properties prop = new Properties();sessionFactory.setHibernateProperties(prop);sessionFactory.setDataSource(dataSource);sessionFactory.setPackagesToScan("outfox.course.user.server.*");return sessionFactory;}
}

踩过的坑

注意hibernate版本

注意引入的spring-orm的版本与系统中之前引入的hibernate要一致,不然会因为冲突导致启动失败。而且不同版本间植入DataSource的方式是不一样的。需要额外注意。

EncryptDataSource初始化失败

错误信息:

2021-08-25 19:08:14.842 ERROR [courseop-user,,,] 1 --- [           main] o.s.boot.SpringApplication               : Application run failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'api': Unsatisfied dependency expressed through field 'mapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userMapper' defined in URL [jar:file:/app/app.jar!/BOOT-INF/classes!/com/youdao/ke/courseop/user/server/dao/UserMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Unsatisfied dependency expressed through method 'sqlSessionFactory' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'encryptDataSource' defined in class path resource [org/apache/shardingsphere/shardingjdbc/spring/boot/SpringBootConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'encryptDataSource' threw exception; nested exception is java.sql.SQLException: Table name pattern can not be NULL or empty.at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:596) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90) ~[spring-beans-5.1.5.RELEASE.jar!/:5.1.5.RELEASE]at

错误原因:
由于是EncryptDataSource初始化失败,所以我们从其初始化流程入手。如下所示EncryptDataSource在初始化时会初始化其上下文EncryptRuntimeContext,该上下文持有数据库基本信息和数据库相关表的原数据。所以在初始化时会调用jdbc的getTables方法来获取所需要的信息。

初始化流程
1.org.apache.shardingsphere.shardingjdbc.spring.boot.SpringBootConfiguration#encryptDataSource
2.org.apache.shardingsphere.shardingjdbc.api.EncryptDataSourceFactory#createDataSource
3.org.apache.shardingsphere.shardingjdbc.jdbc.core.datasource.EncryptDataSource#EncryptDataSource
4.org.apache.shardingsphere.shardingjdbc.jdbc.core.context.EncryptRuntimeContext#EncryptRuntimeContext
5.org.apache.shardingsphere.shardingjdbc.jdbc.core.context.SingleDataSourceRuntimeContext#SingleDataSourceRuntimeContext
6.org.apache.shardingsphere.shardingjdbc.jdbc.core.context.SingleDataSourceRuntimeContext#createMetaData
7.org.apache.shardingsphere.shardingjdbc.jdbc.core.context.EncryptRuntimeContext#loadSchemaMetaData
8.org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaDataLoader#load(javax.sql.DataSource, int, java.lang.String)
9.org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaDataLoader#loadAllTableNames
10.com.mysql.cj.jdbc.DatabaseMetaData#getTables

getTables的部分源码如下,由于shardingsphere调用改方法时参数tableNamePattern为null,所以会进入if语句,当nullNamePatternMatchesAll为true时pattern为%会加载所有表的原数据,如果是false则会抛出我们所遇到的错误。那么他到底是false还是true呢?经过一番百度发现mysql-connector 6的该参数为false,这也是它的一个bug!!!详情如下:
https://bugs.mysql.com/bug.php?id=81105
然而本地demo快速启动后,第一个真实业务应用接入shardingsphere选择的就恰好是个6版本的connector应用。为此花了挺多经力去排查,结果却是因为mysql的bug。难顶!!!

  public java.sql.ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, final String[] types) throws SQLException {if (tableNamePattern == null) {if (this.nullNamePatternMatchesAll) {tableNamePattern = "%";} else {throw SQLError.createSQLException(Messages.getString("DatabaseMetaData.13"), SQLError.SQL_STATE_ILLEGAL_ARGUMENT, getExceptionInterceptor());}}....//省略号
}

解决方案:
经过上述分析后解决方案也就比较清晰了,我们只需要在连接串上指定该参数为true即可,例如:
jdbc:mysql://127.0.0.1:3306/test?nullNamePatternMatchesAll=true

连接池初始化卡住

应用启动时在输出日志DruidDataSource : {dataSource-1} inited后卡住,半天无响应。
错误信息:

2021-08-25 19:17:57.558  INFO [,,] 155 --- [localhost-startStop-1] c.d.d.core : DataStax Java driver 3.7.0 for Apache Cassandra
2021-08-25 19:17:57.570  INFO [,,] 155 --- [localhost-startStop-1] c.d.d.c.GuavaCompatibility : Detected Guava >= 19 in the classpath, using modern compatibility layer
2021-08-25 19:17:57.993  INFO [,,] 155 --- [localhost-startStop-1] c.d.d.c.ClockFactory : Using native clock to generate timestamps.
2021-08-25 19:17:58.188  INFO [,,] 155 --- [localhost-startStop-1] c.d.d.c.ClockFactory : Using native clock to generate timestamps.
2021-08-25 19:17:58.322  INFO [,,] 155 --- [localhost-startStop-1] c.d.d.c.NettyUtil : Did not find Netty's native epoll transport in the classpath, defaulting to NIO.
2021-08-25 19:17:59.164  INFO [,,] 155 --- [localhost-startStop-1] c.d.d.c.p.DCAwareRoundRobinPolicy : Using data-center name 'datacenter1' for DCAwareRoundRobinPolicy (if this is incorrect, please provide the correct datacenter name with DCAwareRoundRobinPolicy constructor)
2021-08-25 19:17:59.165  INFO [,,] 155 --- [localhost-startStop-1] c.d.d.c.Cluster : New Cassandra host /10.177.47.40:9042 added
2021-08-25 19:17:59.985  INFO [,,] 155 --- [localhost-startStop-1] c.a.d.p.DruidDataSource : {dataSource-1} inited
...戛然而止

jstack输出情况:

2021-08-30 19:40:41
Full thread dump OpenJDK 64-Bit Server VM (25.201-b08 mixed mode):"Attach Listener" #38 daemon prio=9 os_prio=0 tid=0x0000564663694000 nid=0x100 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLELocked ownable synchronizers:- None"Druid-ConnectionPool-Destroy-1173635924" #37 daemon prio=5 os_prio=0 tid=0x000056465b241800 nid=0xdd waiting on condition [0x00007fb7c960d000]java.lang.Thread.State: TIMED_WAITING (sleeping)at java.lang.Thread.sleep(Native Method)at com.alibaba.druid.pool.DruidDataSource$DestroyConnectionThread.run(DruidDataSource.java:2860)Locked ownable synchronizers:- None"Druid-ConnectionPool-Create-1173635924" #36 daemon prio=5 os_prio=0 tid=0x000056465b478800 nid=0xdc waiting for monitor entry [0x00007fb7c970c000]java.lang.Thread.State: BLOCKED (on object monitor)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:205)- waiting to lock <0x00000007a2832df8> (a java.util.concurrent.ConcurrentHashMap)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:373)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1096)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:535)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495)at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$1(AbstractBeanFactory.java:353)at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$532/1525997737.getObject(Unknown Source)at org.springframework.cloud.context.scope.GenericScope$BeanLifecycleWrapper.getBean(GenericScope.java:390)- locked <0x00000007a259c2a0> (a java.lang.String)at org.springframework.cloud.context.scope.GenericScope.get(GenericScope.java:184)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:350)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)at org.springframework.aop.target.SimpleBeanTargetSource.getTarget(SimpleBeanTargetSource.java:35)at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:672)at brave.sampler.Sampler$$EnhancerBySpringCGLIB$$aa81a26b.isSampled(<generated>)at brave.Tracer.nextContext(Tracer.java:234)at brave.Tracer.newRootContext(Tracer.java:202)at brave.Tracer.newTrace(Tracer.java:141)at brave.Tracer.nextSpan(Tracer.java:413)at brave.propagation.ThreadLocalSpan.next(ThreadLocalSpan.java:119)at brave.mysql.TracingStatementInterceptor.preProcess(TracingStatementInterceptor.java:33)at com.mysql.jdbc.NoSubInterceptorWrapper.preProcess(NoSubInterceptorWrapper.java:65)at com.mysql.jdbc.MysqlIO.invokeStatementInterceptorsPre(MysqlIO.java:2865)at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2586)at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2491)- locked <0x000000072b6fcb90> (a com.mysql.jdbc.JDBC4Connection)at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2449)at com.mysql.jdbc.StatementImpl.executeQuery$sentryProxy(StatementImpl.java:1381)- locked <0x000000072b6fcb90> (a com.mysql.jdbc.JDBC4Connection)at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java)at com.mysql.jdbc.ConnectionImpl.loadServerVariables(ConnectionImpl.java:3797)at com.mysql.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:3230)at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2068)at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2030)- locked <0x000000072b6fcb90> (a com.mysql.jdbc.JDBC4Connection)at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:778)at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.reflect.Constructor.newInstance(Constructor.java:423)at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:386)at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1651)at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1717)at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2785)Locked ownable synchronizers:- None"Abandoned connection cleanup thread" #35 daemon prio=5 os_prio=0 tid=0x0000564664272800 nid=0xdb in Object.wait() [0x00007fb7c9fad000]java.lang.Thread.State: TIMED_WAITING (on object monitor)at java.lang.Object.wait(Native Method)- waiting on <0x000000072f04bf08> (a java.lang.ref.ReferenceQueue$Lock)at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:144)- locked <0x000000072f04bf08> (a java.lang.ref.ReferenceQueue$Lock)at com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:64)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)Locked ownable synchronizers:- <0x000000072f0e2eb0> (a java.util.concurrent.ThreadPoolExecutor$Worker)"cluster2-nio-worker-1" #33 prio=5 os_prio=0 tid=0x0000564662dfd000 nid=0xda runnable [0x00007fb7cc840000]java.lang.Thread.State: RUNNABLEat sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)- locked <0x000000074ef7aa20> (a io.netty.channel.nio.SelectedSelectionKeySet)- locked <0x000000074ef6a7b8> (a java.util.Collections$UnmodifiableSet)- locked <0x000000074ef6a6a0> (a sun.nio.ch.EPollSelectorImpl)at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62)at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:737)at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:392)at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)at java.lang.Thread.run(Thread.java:748)Locked ownable synchronizers:- None"cluster2-timeouter-0" #30 prio=5 os_prio=0 tid=0x000056465fddb000 nid=0xd7 sleeping[0x00007fb7cee00000]java.lang.Thread.State: TIMED_WAITING (sleeping)at java.lang.Thread.sleep(Native Method)at io.netty.util.HashedWheelTimer$Worker.waitForNextTick(HashedWheelTimer.java:567)at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:466)at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)at java.lang.Thread.run(Thread.java:748)Locked ownable synchronizers:- None"cluster2-nio-worker-0" #32 prio=5 os_prio=0 tid=0x0000564662ef7800 nid=0xd6 runnable [0x00007fb7d0229000]java.lang.Thread.State: RUNNABLEat sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)- locked <0x000000074ee720d0> (a io.netty.channel.nio.SelectedSelectionKeySet)- locked <0x000000074ed7c380> (a java.util.Collections$UnmodifiableSet)- locked <0x000000074ed7c250> (a sun.nio.ch.EPollSelectorImpl)at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62)at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:737)at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:392)at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)at java.lang.Thread.run(Thread.java:748)Locked ownable synchronizers:- None"cluster2-scheduled-task-worker-0" #31 prio=5 os_prio=0 tid=0x000056465ce94800 nid=0xd5 runnable [0x00007fb7d0af9000]java.lang.Thread.State: TIMED_WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for  <0x00000007559e9bc0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)at java.lang.Thread.run(Thread.java:748)Locked ownable synchronizers:- None"cluster2-connection-reaper-0" #29 prio=5 os_prio=0 tid=0x000056465dee2800 nid=0xd4 waiting on condition [0x00007fb7d05f8000]java.lang.Thread.State: TIMED_WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for  <0x0000000755a196b8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)at java.lang.Thread.run(Thread.java:748)Locked ownable synchronizers:- None"AsyncReporter{org.springframework.cloud.sleuth.zipkin2.sender.RestTemplateSender@4656f885}" #28 daemon prio=5 os_prio=0 tid=0x000056466713b800 nid=0xd3 runnable [0x00007fb7cde2e000]java.lang.Thread.State: TIMED_WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for  <0x0000000778318088> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)at zipkin2.reporter.ByteBoundedQueue.drainTo(ByteBoundedQueue.java:81)at zipkin2.reporter.AsyncReporter$BoundedAsyncReporter.flush(AsyncReporter.java:257)at zipkin2.reporter.AsyncReporter$Builder$1.run(AsyncReporter.java:190)Locked ownable synchronizers:- None"localhost-startStop-1" #27 daemon prio=5 os_prio=0 tid=0x00005646631f1800 nid=0xd2 waiting on condition [0x00007fb7cd58a000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for  <0x00000007a0e3de28> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)at com.alibaba.druid.pool.DruidDataSource.takeLast(DruidDataSource.java:2178)at com.alibaba.druid.pool.DruidDataSource.getConnectionInternal(DruidDataSource.java:1671)at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1408)at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1388)at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1378)at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:99)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:59)at org.apache.shardingsphere.shardingjdbc.jdbc.core.datasource.EncryptDataSource.<init>(EncryptDataSource.java:47)at org.apache.shardingsphere.shardingjdbc.api.EncryptDataSourceFactory.createDataSource(EncryptDataSourceFactory.java:46)at org.apache.shardingsphere.shardingjdbc.spring.boot.SpringBootConfiguration.encryptDataSource(SpringBootConfiguration.java:127)at org.apache.shardingsphere.shardingjdbc.spring.boot.SpringBootConfiguration$$EnhancerBySpringCGLIB$$7f2e62af.CGLIB$encryptDataSource$2(<generated>)at org.apache.shardingsphere.shardingjdbc.spring.boot.SpringBootConfiguration$$EnhancerBySpringCGLIB$$7f2e62af$$FastClassBySpringCGLIB$$5f57e9e8.invoke(<generated>)at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:365)at org.apache.shardingsphere.shardingjdbc.spring.boot.SpringBootConfiguration$$EnhancerBySpringCGLIB$$7f2e62af.encryptDataSource(<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:498)at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:583)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1096)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:535)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495)at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$164/295180183.getObject(Unknown Source)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)- locked <0x00000007a2832df8> (a java.util.concurrent.ConcurrentHashMap)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:251)at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1322)at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1288)at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1215)at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1093)at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.getIfAvailable(DefaultListableBeanFactory.java:1706)at org.springframework.boot.actuate.autoconfigure.jdbc.DataSourceHealthIndicatorAutoConfiguration.<init>(DataSourceHealthIndicatorAutoConfiguration.java:77)at org.springframework.boot.actuate.autoconfigure.jdbc.DataSourceHealthIndicatorAutoConfiguration$$EnhancerBySpringCGLIB$$5a21ccdc.<init>(<generated>)at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.reflect.Constructor.newInstance(Constructor.java:423)at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:170)at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:117)at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:276)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1266)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1123)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:535)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495)at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$164/295180183.getObject(Unknown Source)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)- locked <0x00000007a2832df8> (a java.util.concurrent.ConcurrentHashMap)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:373)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1096)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:535)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495)at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$164/295180183.getObject(Unknown Source)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)- locked <0x00000007a2832df8> (a java.util.concurrent.ConcurrentHashMap)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:514)at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:502)at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1196)at org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorBeansComposite.get(HealthIndicatorBeansComposite.java:46)at org.springframework.boot.actuate.autoconfigure.health.HealthEndpointConfiguration.healthEndpoint(HealthEndpointConfiguration.java:38)at org.springframework.boot.actuate.autoconfigure.health.HealthEndpointConfiguration$$EnhancerBySpringCGLIB$$7de3139.CGLIB$healthEndpoint$0(<generated>)at org.springframework.boot.actuate.autoconfigure.health.HealthEndpointConfiguration$$EnhancerBySpringCGLIB$$7de3139$$FastClassBySpringCGLIB$$21912da1.invoke(<generated>)at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:365)at org.springframework.boot.actuate.autoconfigure.health.HealthEndpointConfiguration$$EnhancerBySpringCGLIB$$7de3139.healthEndpoint(<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:498)at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:583)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1096)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:535)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495)at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$164/295180183.getObject(Unknown Source)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)- locked <0x00000007a2832df8> (a java.util.concurrent.ConcurrentHashMap)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1087)at org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer.createEndpointBean(EndpointDiscoverer.java:144)at org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer.createEndpointBeans(EndpointDiscoverer.java:133)at org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer.discoverEndpoints(EndpointDiscoverer.java:123)at org.springframework.boot.actuate.endpoint.annotation.EndpointDiscoverer.getEndpoints(EndpointDiscoverer.java:117)at org.springframework.boot.actuate.autoconfigure.endpoint.web.ServletEndpointManagementContextConfiguration$WebMvcServletEndpointManagementContextConfiguration.servletEndpointRegistrar(ServletEndpointManagementContextConfiguration.java:75)at org.springframework.boot.actuate.autoconfigure.endpoint.web.ServletEndpointManagementContextConfiguration$WebMvcServletEndpointManagementContextConfiguration$$EnhancerBySpringCGLIB$$a171d331.CGLIB$servletEndpointRegistrar$0(<generated>)at org.springframework.boot.actuate.autoconfigure.endpoint.web.ServletEndpointManagementContextConfiguration$WebMvcServletEndpointManagementContextConfiguration$$EnhancerBySpringCGLIB$$a171d331$$FastClassBySpringCGLIB$$d7310bfa.invoke(<generated>)at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:365)at org.springframework.boot.actuate.autoconfigure.endpoint.web.ServletEndpointManagementContextConfiguration$WebMvcServletEndpointManagementContextConfiguration$$EnhancerBySpringCGLIB$$a171d331.servletEndpointRegistrar(<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:498)at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:583)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1246)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1096)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:535)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495)at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$164/295180183.getObject(Unknown Source)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)- locked <0x00000007a2832df8> (a java.util.concurrent.ConcurrentHashMap)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204)at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:226)at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:214)at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addServletContextInitializerBeans(ServletContextInitializerBeans.java:91)at org.springframework.boot.web.servlet.ServletContextInitializerBeans.<init>(ServletContextInitializerBeans.java:80)at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getServletContextInitializerBeans(ServletWebServerApplicationContext.java:250)at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.selfInitialize(ServletWebServerApplicationContext.java:237)at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext$$Lambda$377/1806434229.onStartup(Unknown Source)at org.springframework.boot.web.embedded.tomcat.TomcatStarter.onStartup(TomcatStarter.java:54)at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5245)- locked <0x00000007a501ff88> (a org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedContext)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)- locked <0x00000007a501ff88> (a org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedContext)at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1420)at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1410)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)Locked ownable synchronizers:- <0x000000079ae043f8> (a java.util.concurrent.ThreadPoolExecutor$Worker)"Tomcat-startStop-1" #26 daemon prio=5 os_prio=0 tid=0x0000564662009800 nid=0xd1 waiting on condition [0x00007fb7cdcfd000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for  <0x000000079ae043d8> (a java.util.concurrent.FutureTask)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429)at java.util.concurrent.FutureTask.get(FutureTask.java:191)at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:942)- locked <0x00000007a5b29ec0> (a org.apache.catalina.core.StandardHost)at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872)- locked <0x00000007a5b29ec0> (a org.apache.catalina.core.StandardHost)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)- locked <0x00000007a5b29ec0> (a org.apache.catalina.core.StandardHost)at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1420)at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1410)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)Locked ownable synchronizers:- <0x000000079ad8acf0> (a java.util.concurrent.ThreadPoolExecutor$Worker)"Log4j2-TF-6-AsyncLoggerConfig-4" #24 daemon prio=5 os_prio=0 tid=0x000056465ff50000 nid=0xcc runnable [0x00007fb7cfb53000]java.lang.Thread.State: TIMED_WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for  <0x00000007a2ef86f0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)at com.lmax.disruptor.TimeoutBlockingWaitStrategy.waitFor(TimeoutBlockingWaitStrategy.java:38)at com.lmax.disruptor.ProcessingSequenceBarrier.waitFor(ProcessingSequenceBarrier.java:56)at com.lmax.disruptor.BatchEventProcessor.processEvents(BatchEventProcessor.java:159)at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:125)at java.lang.Thread.run(Thread.java:748)Locked ownable synchronizers:- None"catalogWatchTaskScheduler-1" #20 prio=5 os_prio=0 tid=0x00005646604ea000 nid=0xc8 runnable [0x00007fb7cfcd6000]java.lang.Thread.State: TIMED_WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for  <0x00000007a1f5ea98> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)Locked ownable synchronizers:- None"spring.cloud.inetutils" #19 daemon prio=5 os_prio=0 tid=0x000056465eeca000 nid=0xc7 waiting on condition [0x00007fb7cecb7000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for  <0x00000007a2a10ce8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)Locked ownable synchronizers:- None"Service Thread" #14 daemon prio=9 os_prio=0 tid=0x000056465a004000 nid=0xbc runnable [0x0000000000000000]java.lang.Thread.State: RUNNABLELocked ownable synchronizers:- None"C1 CompilerThread3" #13 daemon prio=9 os_prio=0 tid=0x0000564659fce000 nid=0xbb waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLELocked ownable synchronizers:- None"C2 CompilerThread2" #12 daemon prio=9 os_prio=0 tid=0x0000564659fcc000 nid=0xba waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLELocked ownable synchronizers:- None"C2 CompilerThread1" #11 daemon prio=9 os_prio=0 tid=0x0000564659fc9000 nid=0xb9 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLELocked ownable synchronizers:- None"C2 CompilerThread0" #10 daemon prio=9 os_prio=0 tid=0x0000564659fc6800 nid=0xb8 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLELocked ownable synchronizers:- None"JDWP Event Helper Thread" #9 daemon prio=10 os_prio=0 tid=0x0000564659fba800 nid=0xb7 runnable [0x0000000000000000]java.lang.Thread.State: RUNNABLELocked ownable synchronizers:- None"JDWP Transport Listener: dt_socket" #8 daemon prio=10 os_prio=0 tid=0x0000564659f81000 nid=0xb6 runnable [0x0000000000000000]java.lang.Thread.State: RUNNABLELocked ownable synchronizers:- None"init-sentryagent-message-thread" #7 prio=5 os_prio=0 tid=0x0000564659f57000 nid=0xb5 waiting on condition [0x00007fb7d1b7d000]java.lang.Thread.State: TIMED_WAITING (sleeping)at java.lang.Thread.sleep(Native Method)at com.netease.sentry.javaagent.collector.CollectorInitializer$1.run(CollectorInitializer.java:139)Locked ownable synchronizers:- None"Signal Dispatcher" #5 daemon prio=9 os_prio=0 tid=0x0000564659a98800 nid=0xb4 runnable [0x0000000000000000]java.lang.Thread.State: RUNNABLELocked ownable synchronizers:- None"Surrogate Locker Thread (Concurrent GC)" #4 daemon prio=9 os_prio=0 tid=0x0000564659a96800 nid=0xb3 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLELocked ownable synchronizers:- None"Finalizer" #3 daemon prio=8 os_prio=0 tid=0x0000564659a62000 nid=0xb2 in Object.wait() [0x00007fb7d5172000]java.lang.Thread.State: WAITING (on object monitor)at java.lang.Object.wait(Native Method)- waiting on <0x00000007a2a113d8> (a java.lang.ref.ReferenceQueue$Lock)at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:144)- locked <0x00000007a2a113d8> (a java.lang.ref.ReferenceQueue$Lock)at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:165)at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:216)Locked ownable synchronizers:- None"Reference Handler" #2 daemon prio=10 os_prio=0 tid=0x0000564659a5f000 nid=0xb1 in Object.wait() [0x00007fb7d5273000]java.lang.Thread.State: WAITING (on object monitor)at java.lang.Object.wait(Native Method)- waiting on <0x00000007a2818190> (a java.lang.ref.Reference$Lock)at java.lang.Object.wait(Object.java:502)at java.lang.ref.Reference.tryHandlePending(Reference.java:191)- locked <0x00000007a2818190> (a java.lang.ref.Reference$Lock)at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)Locked ownable synchronizers:- None"main" #1 prio=5 os_prio=0 tid=0x0000564658cc2000 nid=0x9b waiting on condition [0x00007fb7fea51000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for  <0x000000079ad8acd0> (a java.util.concurrent.FutureTask)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429)at java.util.concurrent.FutureTask.get(FutureTask.java:191)at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:942)- locked <0x00000007a601bc98> (a org.apache.catalina.core.StandardEngine)at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)- locked <0x00000007a601bc98> (a org.apache.catalina.core.StandardEngine)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)- locked <0x00000007a601bc98> (a org.apache.catalina.core.StandardEngine)at org.apache.catalina.core.StandardService.startInternal(StandardService.java:422)- locked <0x00000007a601bc98> (a org.apache.catalina.core.StandardEngine)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)- locked <0x00000007a838e660> (a org.apache.catalina.core.StandardService)at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:793)- locked <0x00000007a89793b0> (a java.lang.Object)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)- locked <0x00000007a8979270> (a org.apache.catalina.core.StandardServer)at org.apache.catalina.startup.Tomcat.start(Tomcat.java:366)at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:107)- locked <0x000000079d801328> (a java.lang.Object)at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.<init>(TomcatWebServer.java:86)at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:413)at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:174)at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:179)at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:152)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)- locked <0x00000007a2832fc0> (a java.lang.Object)at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:386)at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)at outfox.course.user.server.App.main(App.java:32)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:498)at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)at org.springframework.boot.loader.WarLauncher.main(WarLauncher.java:58)Locked ownable synchronizers:- None"VM Thread" os_prio=0 tid=0x0000564659a55000 nid=0xb0 runnable "Gang worker#0 (Parallel GC Threads)" os_prio=0 tid=0x0000564658cd9000 nid=0x9c runnable "Gang worker#1 (Parallel GC Threads)" os_prio=0 tid=0x0000564658cda800 nid=0x9d runnable "Gang worker#2 (Parallel GC Threads)" os_prio=0 tid=0x0000564658cdc000 nid=0x9e runnable "Gang worker#3 (Parallel GC Threads)" os_prio=0 tid=0x0000564658cde000 nid=0x9f runnable "Gang worker#4 (Parallel GC Threads)" os_prio=0 tid=0x0000564658cdf800 nid=0xa0 runnable "Gang worker#5 (Parallel GC Threads)" os_prio=0 tid=0x0000564658ce1800 nid=0xa1 runnable "Gang worker#6 (Parallel GC Threads)" os_prio=0 tid=0x0000564658ce3000 nid=0xa2 runnable "Gang worker#7 (Parallel GC Threads)" os_prio=0 tid=0x0000564658ce5000 nid=0xa3 runnable "G1 Main Concurrent Mark GC Thread" os_prio=0 tid=0x0000564658d03800 nid=0xad runnable "Gang worker#0 (G1 Parallel Marking Threads)" os_prio=0 tid=0x0000564658d05000 nid=0xae runnable "Gang worker#1 (G1 Parallel Marking Threads)" os_prio=0 tid=0x0000564658d07000 nid=0xaf runnable "G1 Concurrent Refinement Thread#0" os_prio=0 tid=0x0000564658cf6800 nid=0xac runnable "G1 Concurrent Refinement Thread#1" os_prio=0 tid=0x0000564658cf4800 nid=0xab runnable "G1 Concurrent Refinement Thread#2" os_prio=0 tid=0x0000564658cf2800 nid=0xaa runnable "G1 Concurrent Refinement Thread#3" os_prio=0 tid=0x0000564658cf1000 nid=0xa9 runnable "G1 Concurrent Refinement Thread#4" os_prio=0 tid=0x0000564658cef000 nid=0xa8 runnable "G1 Concurrent Refinement Thread#5" os_prio=0 tid=0x0000564658ced000 nid=0xa7 runnable "G1 Concurrent Refinement Thread#6" os_prio=0 tid=0x0000564658ceb800 nid=0xa6 runnable "G1 Concurrent Refinement Thread#7" os_prio=0 tid=0x0000564658ce9800 nid=0xa5 runnable "G1 Concurrent Refinement Thread#8" os_prio=0 tid=0x0000564658ce7800 nid=0xa4 runnable "VM Periodic Task Thread" os_prio=0 tid=0x000056465a03b800 nid=0xbd waiting on condition JNI global references: 12610

错误详情:
durid初始化时block住,线程情况如上日志,等待填坑。。。
解决方案:
配置连接池对应参数在spring.shardingsphere.datasource.{自定义代理名}下。

        poolPingConnectionsNotUsedFor: 60000removeAbandoned: falseconnectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000initialSize: 5minIdle: 5maxActive: 50validationQuery: SELECT 1 FROM DUALmaxWait: 60000poolPreparedStatements: falsefilters: stat,walltestOnBorrow: falsetestWhileIdle: trueminEvictableIdleTimeMillis: 300000timeBetweenEvictionRunsMillis: 60000testOnReturn: false
启动后查询失败

错误详情:
所有的查询返回都是空。且无明显报错,断点发现是使用过hql查询时参数无法进行匹配。
错误原因:
由于未配置entity扫描路径,导致sql执行后映射失败。
解决方案:
设置mapper扫描包路径

sessionFactory.setPackagesToScan("outfox.course.user.server.*");
sharding-jdbc 配置不生效

错误详情:
配置明文与密文字段对应关系后,在数据库插入操作是对应的密文字段在未正确写入。
错误原因:
由于sharding-jdbc加载数据库表基本信息时忽略了列明的大小写,导致在进行加密和解密时无法进行一一对应。
解决方案:
拉sharding-jdbc源码修复bug。

org.apache.shardingsphere.infra.metadata.schema.model.TableMetaData
sharding-jdbc 配置后,duplicate for update执行失败

错误详情:
业务上使用了ON DUPLICATE KEY UPDATE,在执行时参数对不上。导致报错。
错误原因:
sharding-jdbc修改这类语句时只有在配置了使用加密查询或者加密字段不是null时才会将参数加入param集合,而列明则是始终加入,所以会导致参数数量不一致。
解决方案:
拉sharding-jdbc源码修复bug。

org.apache.shardingsphere.encrypt.rewrite.parameter.impl.EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter#rewrite

sharding-jdbc数据加密实践与坑相关推荐

  1. Spring boot + Sharding JDBC 分库分表 及 分布式事务处理

    Sharding JDBC 基础概念 Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC.Proxy 和 Sidecar(规划中)这 3 款既能够 ...

  2. Sharding JDBC分片和读写分离详解

    目录 Sharding Sphere简介 开始使用Sharding JDBC 数据分片 简单示例 Spring Boot示例 代码分析 属性分析 绑定表和广播表 真实表 绑定表 广播表 Shardin ...

  3. 基于docker-compose的Gitlab CI/CD实践排坑指南

    长话短说 经过长时间实操验证,终于完成基于Gitlab的CI/CD实践,本次实践的坑位很多, 实操过程尽量接近最佳实践(不做hack, 不做骚操作),记录下来加深理解. 看过博客园<docker ...

  4. Spring boot项目集成Sharding Jdbc

    环境 jdk:1.8 framework: spring boot, sharding jdbc database: MySQL 搭建步骤 在pom 中加入sharding 依赖 <depend ...

  5. K8S+Harbor+gluster+haproxy 实践加坑

    K8S+Harbor+gluster+haproxy 实践加坑 ​ -阿特&Max Shen 半年未有blog,今日归来玩开源.莫问英雄归路,青山绿水总相逢. 一切缘起都是因为devops, ...

  6. Sharding JDBC(四) 分片策略一:标准分片策略StandardShardingStrategy

    目录 一.标准分片策略StandardShardingStrategy 二.StandardShardingStrategy配置实现 分库分表最核心的两点SQL 路由  . SQL 改写 applic ...

  7. sharding jdbc 的雪花算法中的属性worker.id和max.vibration.offset

    雪花算法生成的id总共64位8个字节,结构如下: 符号位 时间位 工作机器标识位 序列位 1位(固定位0) 41位 10位 12位 worker.id sharding jdbc  4.1.1使用雪花 ...

  8. 理解Sharding jdbc原理,看这一篇就够了

    相比于Spring基于AbstractRoutingDataSource实现的分库分表功能,Sharding jdbc在单库单表扩展到多库多表时,兼容性方面表现的更好一点.例如,spring实现的分库 ...

  9. 02-SpringBoot工程中JDBC应用实践

    文章目录 HikariCP应用实践 背景分析 池化思想分析 连接池原理分析 Java中的连接池 HikariCP入门实践 数据初始化 创建项目模块 添加项目依赖 配置HikariCP连接池 创建项目启 ...

最新文章

  1. python 把一个字典赋值给一个空的字典,或者是列表赋值给一个空的列表显示黄色警告
  2. git 撤销提交的文件
  3. python代码规范化_数据标准化方法及其Python代码实现
  4. 【opencv】7. cv::VideoWriter的使用,把图片写进video
  5. 爬虫爬取链接中文字_使用爬虫技术爬取图片链接并下载图片
  6. bzoj 1191 [HNOI2006]超级英雄Hero
  7. 14.count-api
  8. win7系统笔记本电脑开机蓝屏怎么办
  9. python医疗发票 信息抽取_PYTHON网络爬虫与信息提取[信息的组织与提取](单元五)...
  10. Java中String类型的概述
  11. 第一周-第11章节-Python3.5-if else流程判断
  12. java 内存管理 知乎_[知乎]Java 语言的 GC 为什么不实时释放内存?
  13. python入门——P54论一只爬虫的自我修养1
  14. [OpenGL] 斯坦福兔子与显示列表
  15. php 排除前后空格,php去除字符串前后空格的方法
  16. aix中c语言生成pdf文档,利用PDFLib生成PDF文档
  17. GBase 8a开启防火墙安装集群添加端口策略
  18. Vue 开源项目库汇总
  19. 防火墙开放21端口linux,linux防火墙开放80,3306,21,443端口
  20. constructor构造函数(React)

热门文章

  1. 利用canvas下载图片,透明区默认变为黑色
  2. 无线打印机服务器安装步骤,【DDwifi打印服务器】Windows 10系统添加打印机步骤(离线安装打印机驱动)...
  3. js导出数据到excel纯数字过长如何将默认的科学计数法显示正常
  4. 关于ADMM的研究(二)
  5. 邮箱正则验证(vant实例)
  6. 数据分析统计学原理第八章:区间估计 | 我的统计学原理复习日记
  7. 大白话 六问数据中台!你想知道的都在这了!
  8. el-upload实现上传文件预览
  9. python小项目:MakeCode小游戏——躲砖块
  10. 一篇文章搞定《RecyclerView缓存复用机制》