r2dbc / r2dbc-mssql

R2DBC Driver for Microsoft SQL Server using TDS (Tabular Data Stream) Protocol
Apache License 2.0
178 stars 32 forks source link

java.lang.NoSuchFieldError: LOCK_WAIT_TIMEOUT with Springboot 2.6.x and R2DBC-mssql 0.9.0-Release #252

Closed lovababu closed 2 years ago

lovababu commented 2 years ago

spring-boot-r2dbc-starter: v2.6.3/2.6.4 JDK: 11 R2driver: r2dbc-mssql: v0.9.0-RELEASE

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.r2dbc.spi.ConnectionFactory]: Factory method 'connectionFactory' threw exception; nested exception is java.lang.NoSuchFieldError: LOCK_WAIT_TIMEOUT
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.3.16.jar:5.3.16]
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.16.jar:5.3.16]
... 32 common frames omitted
Caused by: java.lang.NoSuchFieldError: LOCK_WAIT_TIMEOUT
at io.r2dbc.mssql.MssqlConnectionFactoryProvider.create(MssqlConnectionFactoryProvider.java:162) ~[r2dbc-mssql-0.9.0.RELEASE.jar:0.9.0.RELEASE]
at io.r2dbc.mssql.MssqlConnectionFactoryProvider.create(MssqlConnectionFactoryProvider.java:48) ~[r2dbc-mssql-0.9.0.RELEASE.jar:0.9.0.RELEASE]
at io.r2dbc.spi.ConnectionFactories.find(ConnectionFactories.java:112) ~[r2dbc-spi-0.8.6.RELEASE.jar:na]
at io.r2dbc.spi.ConnectionFactories.get(ConnectionFactories.java:142) ~[r2dbc-spi-0.8.6.RELEASE.jar:na]

Is Latest version of R2DBC not compatible with Springboot 2.6.x and JDK 11?

mp911de commented 2 years ago

This is a dependency compatibility mismatch. Upgrade r2dbc-spi to 0.9.0.RELEASE or 0.9.1.RELEASE.

lovababu commented 2 years ago

Thanks @mp911de it works. Apologies, thought r2dbc-spi is transitive dependency to r2dbc-mssql, somehow overlooked into the versions.

mp911de commented 2 years ago

It is indeed transitive but when using an application runtime framework such as Spring Boot, dependency versions are managed by Spring Boot and transitive versions are pinned to the ones provided by Spring Boot.