从 Spring 5 升级到 Spring 6 (Spring Boot v2 — v3) 带来了 Jakarta EE 9+。这使得
com.oracle.database.messaging:aqapi
不兼容,因为 ConnectionFactory
类从 javax
包移至 jakarta
包。
这个问题可以通过将
com.oracle.database.messaging:aqapi
替换为 com.oracle.database.messaging:aqapi-jakarta
依赖项来解决。
但是在这次替换之后,项目编译时不会出现错误:
createShardingKeyBuilder() in cannot implement createShardingKeyBuilder() in javax.sql.CommonDataSource return type oracle.jdbc.OracleShardingKeyBuilder is not compatible with java.sql.ShardingKeyBuilder
,或者可能是createShardingKeyBuilder in oracle.ucp.jdbc.PoolDataSource clashes with createShardingKeyBuilder in javax.sql.CommonDataSource
。
问题在于
com.oracle.database.jdbc:ojdbc
依赖。
com.oracle.database.messaging:aqapi-jakarta
依赖于 com.oracle.database.jdbc:ojdbc8
,但要使 Oracle JDBC 在 Java17 下工作,需要 com.oracle.database.jdbc:ojdbc11
。
因此
pom.xml
应该具有通过以下方式指定的依赖关系:
<dependency>
<groupId>com.oracle.database.messaging</groupId>
<artifactId>aqapi-jakarta</artifactId>
<version>23.2.1.0</version>
<exclusions>
<exclusion>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc11</artifactId>
<version>23.2.0.0</version>
</dependency>