Getting R2dbcNonTransientResourceException: Unsupported Orac



我试图为我的Spring Boot应用程序设置R2DBC,该应用程序以Oracle 19c为数据库,并配置了OJDBC8和Java 11。R2DBC版本为0.1.0。由于应用程序无法启动,我得到以下错误。rRDBC工作与Oracle 19c或它需要是Oracle 21x?

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myr2dbccon': Unexpected exception during bean creation; nested exception is io.r2dbc.spi.R2dbcNonTransientResourceException: Unsupported Oracle JDBC Driver version: 19
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:537) ~[spring-beans-5.3.9.jar!/:5.3.9]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar!/:5.3.9]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar!/:5.3.9]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar!/:5.3.9]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar!/:5.3.9]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.9.jar!/:5.3.9]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.9.jar!/:5.3.9]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.9.jar!/:5.3.9]
at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:64) ~[spring-boot-2.5.2.jar!/:2.5.2]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-2.5.2.jar!/:2.5.2]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-2.5.2.jar!/:2.5.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:338) ~[spring-boot-2.5.2.jar!/:2.5.2]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?]

Caused by: io.r2dbc.spi.R2dbcNonTransientResourceException: Unsupported Oracle JDBC Driver version: 19
at oracle.r2dbc.impl.ReactiveJdbcAdapter.getOracleAdapter(ReactiveJdbcAdapter.java:92) ~[oracle-r2dbc-0.1.0.jar!/:0.1.0]
at oracle.r2dbc.impl.OracleConnectionFactoryImpl.<init>(OracleConnectionFactoryImpl.java:120) ~[oracle-r2dbc-0.1.0.jar!/:0.1.0]
at oracle.r2dbc.impl.OracleConnectionFactoryProviderImpl.create(OracleConnectionFactoryProviderImpl.java:93) ~[oracle-r2dbc-0.1.0.jar!/:0.1.0]
at io.r2dbc.spi.ConnectionFactories.find(ConnectionFactories.java:112) ~[r2dbc-spi-0.8.5.RELEASE.jar!/:?]
at io.r2dbc.spi.ConnectionFactories.get(ConnectionFactories.java:142) ~[r2dbc-spi-0.8.5.RELEASE.jar!/:?]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1231) ~[spring-beans-5.3.9.jar!/:5.3.9]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1173) ~[spring-beans-5.3.9.jar!/:5.3.9]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564) ~[spring-beans-5.3.9.jar!/:5.3.9]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar!/:5.3.9]

这个错误是关于Oracle JDBC驱动程序的版本,而不是关于您的Oracle版本。Oracle R2DBC驱动程序依赖于Oracle JDBC驱动程序中的特定功能,这些功能仅在较新的驱动程序版本中可用,然后仅在Java 11(或更高)版本的驱动程序(即ojdbc11,而不是ojdbc8)中可用。

根据https://github.com/oracle/oracle-r2dbc,最新的Oracle R2DBC驱动需要Oracle JDBC 21.3驱动。

它还说:

Oracle R2DBC Driver已被Oracle数据库验证版本18、19和21

要清楚,Oracle JDBC 21.3驱动程序可以很好地与Oracle 19c一起工作,R2DBC也是如此。

简而言之,您需要将Oracle JDBC驱动程序更新为:

<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc11</artifactId>
<version>21.3.0.0</version>
</dependency>

相关内容

最新更新