目前使用1.4.2或者1.7.0客户端sdk与springboot集成使用时,数据库驱动使用opengauss连接,数据库为南大通用8C,发现应用启动时,提示nullpoint exception,查看异常位置是seata通过数据源url解析dbtype时,调用了druid包的JdbcUtils的getDbTypeRaw接口返回null值,但是查看getDbTypeRaw方法只有当入参rawUrl为null时,才会返回null。
=============================
异常信息:
Caused by: java.lang.NullPointerException: null
at io.seata.rm.datasource.util.JdbcUtils.getDbType(JdbcUtils.java:54)
at io.seata.rm.datasource.DataSourceProxy.init(DataSourceProxy.java:89)
at io.seata.rm.datasource.DataSourceProxy.
================================= 应用服务pom依赖版本为:
================== 数据库连接配置为: spring: datasource: url: jdbc:opengauss://***:5432/ima_outpatient driver-class-name: org.opengauss.Driver username: ** password: **
====================== 以下是seata 1.4.2 client sdk的部分代码: io.seata.rm.datasource.util.JdbcUtils: public static String getDbType(String jdbcUrl) { return getDbTypeParser().parseFromJdbcUrl(jdbcUrl).toLowerCase(); }io.seata.sqlparser.druid.DruidDbTypeParserImpl: class DruidDbTypeParserImpl implements DbTypeParser { DruidDbTypeParserImpl() { }
public String parseFromJdbcUrl(String jdbcUrl) {
**return JdbcUtils.getDbType(jdbcUrl, (String)null);**
}
}
com.alibaba.druid.util.JdbcUtils: public static String getDbType(String rawUrl, String driverClassName) { DbType dbType = getDbTypeRaw(rawUrl, driverClassName); return dbType == null ? null : dbType.name(); }
public static DbType getDbTypeRaw(String rawUrl, String driverClassName) { if (rawUrl == null) { return null; } else if (!rawUrl.startsWith("jdbc:derby:") && !rawUrl.startsWith("jdbc:log4jdbc:derby:")) { if (!rawUrl.startsWith("jdbc:mysql:") && !rawUrl.startsWith("jdbc:cobar:") && !rawUrl.startsWith("jdbc:log4jdbc:mysql:")) { if (rawUrl.startsWith("jdbc:mariadb:")) { return DbType.mariadb; ...... } else if (!rawUrl.startsWith("jdbc:pivotal:greenplum:") && !rawUrl.startsWith("jdbc:datadirect:greenplum:")) {
支持opengauss **return !rawUrl.startsWith("jdbc:opengauss:") && !rawUrl.startsWith("jdbc:gaussdb:") && !rawUrl.startsWith("jdbc:dws:iam:") ? null : DbType.gaussdb;**
} else {
return DbType.greenplum;
}