shardingjdbc 5.0.0环境下进行Oracle数据库的分库分表配置,初始化时出现以下错误:
oracle.jdbc.driver.T4CConnection.getSchema()Ljava/lang/String
java.util.concurrent.ExecutionException: java.lang.AbstractMethodError: oracle.jdbc.driver.T4CConnection.getSchema()Ljava/lang/String;
2021-11-18 11:11:50.422 ERROR 19044 --- [ main] .a.s.i.m.s.b.l.TableMetaDataLoaderEngine : Dialect load table meta data error
org.apache.shardingsphere.infra.exception.ShardingSphereException: java.util.concurrent.ExecutionException: java.lang.AbstractMethodError: oracle.jdbc.driver.T4CConnection.getSchema()Ljava/lang/String;
at org.apache.shardingsphere.infra.metadata.schema.builder.loader.TableMetaDataLoaderEngine.loadByDialect(TableMetaDataLoaderEngine.java:99)
at org.apache.shardingsphere.infra.metadata.schema.builder.loader.TableMetaDataLoaderEngine.load(TableMetaDataLoaderEngine.java:66) org.apache.shardingsphere.spring.boot.ShardingSphereAutoConfiguration$$EnhancerBySpringCGLIB$$dff68d25$$FastClassBySpringCGLIB$$b4ce0f86.invoke(<generated>)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:339)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1340)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1329)
at com.sharding.table.ShardingTableApplication.main(ShardingTableApplication.java:12)
Caused by: java.util.concurrent.ExecutionException: java.lang.AbstractMethodError: oracle.jdbc.driver.T4CConnection.getSchema()Ljava/lang/String;
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at org.apache.shardingsphere.infra.metadata.schema.builder.loader.TableMetaDataLoaderEngine.loadByDialect(TableMetaDataLoaderEngine.java:93)
... 94 common frames omitted
Caused by: java.lang.AbstractMethodError: oracle.jdbc.driver.T4CConnection.getSchema()Ljava/lang/String;
at com.zaxxer.hikari.pool.HikariProxyConnection.getSchema(HikariProxyConnection.java)
at org.apache.shardingsphere.infra.metadata.schema.builder.loader.dialect.OracleTableMetaDataLoader.loadTablePrimaryKeys(OracleTableMetaDataLoader.java:169)
at org.apache.shardingsphere.infra.metadata.schema.builder.loader.dialect.OracleTableMetaDataLoader.loadColumnMetaDataMap(OracleTableMetaDataLoader.java:84)
at org.apache.shardingsphere.infra.metadata.schema.builder.loader.dialect.OracleTableMetaDataLoader.load(OracleTableMetaDataLoader.java:71)
at org.apache.shardingsphere.infra.metadata.schema.builder.loader.TableMetaDataLoaderEngine.lambda$loadByDialect$0(TableMetaDataLoaderEngine.java:89)
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)
2021-11-18 11:11:50.522 ERROR 19044 --- [ main] .a.s.i.m.s.b.l.TableMetaDataLoaderEngine : Dialect load table meta data error
经过分析和验证,是因为ojdbc6没有实现该抽象方法。
<dependency>
<groupId>oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>${oracle.version}</version>
</dependency>
更新为ojdbc8。
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.12.0.0</version>
</dependency>
更新后,错误消失。