
# 运行MAS-DB-SDK问题参考
根据上述步骤配置MAS-DB-SDK后，确认相关配置信息都已包含且有效，运行项目可能会遇到一些问题，主要的问题及其相关解决过程如下：
1. **Logback-classic及log4j-to-slf4j的包冲突问题。**
   关键错误信息如下所示：
   ![](https://support.huaweicloud.com/devg-mas/zh-cn_image_0000001273916233.png)
   **出现原因：**
   对接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显示如下：
   ![](https://support.huaweicloud.com/devg-mas/zh-cn_image_0000001230076072.jpg)
   
2. **缺少组件mybatis-spring-boot-starter。**
   报错信息及截图如下：
   ![](https://support.huaweicloud.com/devg-mas/zh-cn_image_0000001230963436.png)
   **关键错误信息：**
   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>
   ```
   
3. **未匹配到正确的数据源信息。**
   报错信息截图如下：
   ![](https://support.huaweicloud.com/devg-mas/zh-cn_image_0000001274805909.png)
   **关键错误信息：**
   Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.报错信息显示未匹配到正确的数据源信息，程序无法启动。
   **出现原因：**
   SpringBoot自带原生数据源，相关数据源的查找是由SpringBoot自动查找并注入，但是YAML件中将SDK提供的数据源替换SpringBoot提供的spring-dataSource后，相关依赖包无法找到数据源配置。
   **解决方案：**
   - 去除SpringBoot的spring-boot-starter-jdbc依赖包。 ![](https://support.huaweicloud.com/devg-mas/zh-cn_image_0000001275155317.jpg)
     
   
   - 配置数据SDK数据源，重启项目，将问题解决。 ![](https://support.huaweicloud.com/devg-mas/zh-cn_image_0000001275840601.png)
     
    
4. **依赖包调用错误。**
   关键错误信息：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内的一个方法时未找到，而报错。
   ![](https://support.huaweicloud.com/devg-mas/zh-cn_image_0000001230647300.png)
   **出现原因**：
   spring-plugin-core-2.0.0.RELEASE.jar对应的swagger2的版本较低。
   **解决方案：**
   当前swagger2的版本为2.9.2，要求将swagger2版本升级为3.0.0，重新加载即可。
   Pom文件修改如下：
   ![](https://support.huaweicloud.com/devg-mas/zh-cn_image_0000001230076076.jpg)
   
5. **io.netty版本错误。**
   关键错误信息：
   ![](https://support.huaweicloud.com/devg-mas/zh-cn_image_0000001280508601.png)
   并且每一段时间会跳出报错信息：
   ![](https://support.huaweicloud.com/devg-mas/zh-cn_image_0000001236268970.png)
   ![](https://support.huaweicloud.com/devg-mas/zh-cn_image_0000001274967541.png)
   根因信息：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文件操作如下：
   ![](https://support.huaweicloud.com/devg-mas/zh-cn_image_0000001275090633.png)
   ![](https://support.huaweicloud.com/devg-mas/zh-cn_image_0000001230651588.png)
   
6. 容器刚启动时，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被拒绝。
   **解决方案**：
   容器启动中增加时延。
   
7. 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版本。
   
8. 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。
   
 
