运行MAS-DB-SDK问题参考
根据上述步骤配置MAS-DB-SDK后,确认相关配置信息都已包含且有效,运行项目可能会遇到一些问题,主要的问题及其相关解决过程如下:
- Logback-classic及log4j-to-slf4j的包冲突问题。
关键错误信息如下所示:
出现原因:
对接SDK需要引入依赖包spring-cloud-starter-huawei-devspore-datasource,而本项目自带依赖包spring-boot-starter-actuator与其在Logback-classic及log4j-to-slf4j上存在冲突。
解决方案:
将对应的冲突包进行exclusion排除,排除方法如下,直接logback-classic和log4j-to-slf4j这两个包在spring-boot-starter-actuator下进行排除。排除后POM.XML显示如下:
- 缺少组件mybatis-spring-boot-starter。
报错信息及截图如下:
关键错误信息:
nested exception is java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required。
出现原因:
缺少相关依赖组件:mybatis-spring-boot-starter。
解决方案:
导入对应的依赖包,依赖包信息如下:
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency>
- 未匹配到正确的数据源信息。
报错信息截图如下:
关键错误信息:
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.报错信息显示未匹配到正确的数据源信息,程序无法启动。
出现原因:
SpringBoot自带原生数据源,相关数据源的查找是由SpringBoot自动查找并注入,但是YAML件中将SDK提供的数据源替换SpringBoot提供的spring-dataSource后,相关依赖包无法找到数据源配置。
解决方案:
- 依赖包调用错误。
关键错误信息:Correct the classpath of your application so that it contains a single, compatible version of org.springframework.plugin.core.PluginRegistry,如报错信息所示,是由于调用spring-plugin-core-2.0.0.RELEASE.jar内的一个方法时未找到,而报错。
出现原因:
spring-plugin-core-2.0.0.RELEASE.jar对应的swagger2的版本较低。
解决方案:
当前swagger2的版本为2.9.2,要求将swagger2版本升级为3.0.0,重新加载即可。
Pom文件修改如下:
- io.netty版本错误。
关键错误信息:
并且每一段时间会跳出报错信息:
根因信息:java.lang.NoSuchMethodError:io.netty.buffer.PooledByteBufAllocator.<init>(ZIIIIIIZ)V。
出现原因:
SDK的使用的io.netty版本较新,而项目本身的io.netty包的版本为4.1.49相对旧,不能满足SDK的需求,故而报错。
解决方案:
对io.netty等相关的依赖包进行升级为4.1.69.Final。主要为netty-buffer,netty-common,netty-transport等包的升级,可先将原先导入的包进行排除,再重新引入较高版本的对应包。相关pom文件操作如下:
- 容器刚启动时,etcd、mysql连接错误,后面自动恢复正常。
load data from etcd failed:
java.util.concurrent.ExecutionException: io.etcd.jetcd.common.exception.EtcdException: io exception
at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)
at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1915)
at com.huawei.devspore.mas.etcd.v3impl.V3ClientImpl.get(V3ClientImpl.java:119)
at com.huawei.devspore.datasource.config.loader.RemoteConfigurationLoader.getConfiguration(RemoteConfigurationLoader.java:102)
at com.huawei.devspore.datasource.config.IntegrationClusterConfiguration.createIntegrationConfiguration(IntegrationClusterConfiguration.java:90)
at com.huawei.devspore.datasource.jdbc.core.datasource.ClusterDataSource.init(ClusterDataSource.java:120)
at com.huawei.devspore.datasource.jdbc.core.datasource.ClusterDataSource.init(ClusterDataSource.java:115)
at com.huawei.devspore.datasource.jdbc.core.datasource.ClusterDataSource.<init>(ClusterDataSource.java:104)
at com.huawei.devspore.datasource.jdbc.core.datasource.ClusterDataSourceFactory.createDataSource(ClusterDataSourceFactory.java:26)
at com.huawei.devspore.datasource.spring.boot.ClusterSpringBootAutoConfiguration.clusterDataSource(ClusterSpringBootAutoConfiguration.java:60)
at com.huawei.devspore.datasource.spring.boot.ClusterSpringBootAutoConfiguration$$EnhancerBySpringCGLIB$$e947fb9e.CGLIB$clusterDataSource$2(<generated>)
at com.huawei.devspore.datasource.spring.boot.ClusterSpringBootAutoConfiguration$$EnhancerBySpringCGLIB$$e947fb9e$$FastClassBySpringCGLIB$$bfd0a96a.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
......
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: /10.211.171.180:2379
Caused by: java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:330)
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:707)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)
.......
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:836)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199)
at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1657)
at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1723)
at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2801)
出现原因:
容器刚启动时,网络尚未正常初始化,导致连接etcd、mysql被拒绝。
解决方案:
容器启动中增加时延。
- jackson版本冲突。
nested exception is java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/PropertyNamingStrategies$KebabCaseStrategy
出现原因:
jackson版本冲突,低版本jackson中没有这个类。
解决方案:
排除低版本jackson依赖,jackson-core使用2.13.2,jackson-databind使用2.13.2.2,jackson-annotation使用2.13.2版本。
- jdk版本较低,连etcd异常。
Caused by: io.netty.channel.ChannelPopelineException: io.grpc.netty.ProtocolNegotiators$ClientTlsHandler.handlerAdded() has thrown an exception;
at io.grpc.netty.ProtocolNegotiators$ProtocolNegotiationHandler.fireProtocolNegotiationEvent(ProtocolNegotiators.java:1089)
... 1 more
Caused by: java.lang.RuntimeException: ALPN unsupported. Is your classpath configured correctly? For Conscrypt, add the appropriate Conscrypt JAR
at io.grpc.netty.ProtocolNegotiators$ClientTlsHandler.handlerAdded0(ProtocolNegotiators.java:599)
at io.grpc.netty.ProtocolNegotiators$ProtocolNegotiationHandler.handlerAdder(ProtocolNegotiators.java:1048)
... 21 more
出现原因:
jdk版本较低,出问题的jdk版本为1.8.0_212,需要引入netty-tcnative-boringssl-static依赖。
解决方案:
增加netty-tcnative-boringssl-static依赖,版本为2.0.46.Final;推荐使用1.8.0_272以上版本jdk。