Zipkin与Mysql8异常: java.sql.SQLException: (conn=106) Unknown system variable 'tx_isolation'(mariadb)

Zipkin与Mysql8版本异常: java.sql.SQLException: (conn=106) Unknown system variable ‘tx_isolation’(mariadb)

Zipkin版本:zipkin-server-2.9.4-exec.jar
Mysql版本:mysql-8.0.15-winx64

在Zipkin搭建启动服务,通过powershell正常启动
在这里插入图片描述

异常分析

当访问页面时,出现以下异常:http://localhost:8402/zipkin/

前端:在这里插入图片描述

后台报错:

在这里插入图片描述
从Hikari到mariadb,先定位到mariadb的数据库连接:

定位到:MariaDbConnection.class
这个类在zipkin-server-2.9.4-exec.jar的mariadb-java-client-2.2.3.jar里面
在这里插入图片描述
在这里插入图片描述

MariaDbConnection.class

public class MariaDbConnection implements Connection {
      ... ...
    public int getTransactionIsolation() throws SQLException {
        Statement stmt = this.createStatement();
        Throwable var2 = null;

        try {
        //Mysql8.0.X之后将tx_isolation修改成了transaction_isolation
            ResultSet rs = stmt.executeQuery("SELECT @@tx_isolation");
            Throwable var4 = null;

            try {
                if (!rs.next()) {
                    throw ExceptionMapper.getSqlException("Could not get transaction isolation level");
                } else {
                    String response = rs.getString(1);
                    byte var7 = -1;
                    switch(response.hashCode()) {
                    case -1296331988:
                        if (response.equals("READ-UNCOMMITTED")) {
                            var7 = 1;
                        }
                        break;
                    case -1116651265:
                        if (response.equals("SERIALIZABLE")) {
                            var7 = 3;
                        }
                        break;
                    case -718034194:
                        if (response.equals("REPEATABLE-READ")) {
                            var7 = 0;
                        }
                        break;
                    case 1633007589:
                        if (response.equals("READ-COMMITTED")) {
                            var7 = 2;
                        }
                    }

                    byte var8;
                    switch(var7) {
                    case 0:
                        var8 = 4;
                        return var8;
                    case 1:
                        var8 = 1;
                        return var8;
                    case 2:
                        var8 = 2;
                        return var8;
                    case 3:
                        var8 = 8;
                        return var8;
                    default:
                        throw ExceptionMapper.getSqlException("Could not get transaction isolation level: Invalid @@tx_isolation value \"" + response + "\"");
                    }
                }
            } catch (Throwable var43) {
                var4 = var43;
                throw var43;
            } finally {
                if (rs != null) {
                    if (var4 != null) {
                        try {
                            rs.close();
                        } catch (Throwable var42) {
                            var4.addSuppressed(var42);
                        }
                    } else {
                        rs.close();
                    }
                }

            }
        } catch (Throwable var45) {
            var2 = var45;
            throw var45;
        } finally {
            if (stmt != null) {
                if (var2 != null) {
                    try {
                        stmt.close();
                    } catch (Throwable var41) {
                        var2.addSuppressed(var41);
                    }
                } else {
                    stmt.close();
                }
            }

        }
    }
    ... ... 

}

解决方案:

下载:zipkin-server-2.12.9-exec.jar
使用该版本的的zipkin,没有报错,
里面的mariadb是mariadb-java-client-2.4.1.jar版本

MariaDbConnection.class

public class MariaDbConnection implements Connection {
    public int getTransactionIsolation() throws SQLException {
        Statement stmt = this.createStatement();
        String sql = "SELECT @@tx_isolation";
        //这里根据连接数据库的协议获取到相关版本做了校验
        if (!this.protocol.isServerMariaDb() && (this.protocol.getMajorServerVersion() >= 8 && this.protocol.versionGreaterOrEqual(8, 0, 3) || this.protocol.getMajorServerVersion() < 8 && this.protocol.versionGreaterOrEqual(5, 7, 20))) {
            sql = "SELECT @@transaction_isolation";
        }
    ... ...
    
    }
   ... ...

}

测试结果:未报错
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值