第一次使用r2dbc,在一个四年的工程里。因为工程的dependencyManagement限制了依赖的版本:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-r2dbc</artifactId>
</dependency>
一开始用的下面这个:
<dependency>
<groupId>io.asyncer</groupId>
<artifactId>r2dbc-mysql</artifactId>
<version>1.4.0</version>
</dependency>
后来换成下面这个:
<dependency>
<groupId>dev.miku</groupId>
<artifactId>r2dbc-mysql</artifactId>
<version>0.8.2.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
spring-boot-starter-data-r2dbc版本是2.3.9,
mysql-connector-java版本是8.0.27
r2dbc-mysql的版本是1.4.0
启动的时候报错误:
java.lang.NoSuchFieldError: LOCK_WAIT_TIMEOUT
搜到了一个github的oracle-r2dbc类库ISSUE页面,有人回答是版本不兼容导致的。spring-boot-starter-data-r2dbc如果是版本低,那么应该用r2dbc类库的0.8版本。mvnrepository中没有看到这个类库有0.9以下版本。直到看到这个贴子:
https://github.com/asyncer-io/r2dbc-mysql
Refer to the table below to determine the appropriate version of r2dbc-mysql for your project.
推荐的版本如下:
spring-boot-starter-data-r2dbc | spring-data-r2dbc | r2dbc-spi | r2dbc-mysql(recommended) |
---|---|---|---|
3.0.* and above | 3.0.* and above | 1.0.0.RELEASE | io.asyncer:r2dbc-mysql:1.4.0 |
2.7.* | 1.5.* | 0.9.1.RELEASE | io.asyncer:r2dbc-mysql:0.9.7 |
2.6.* and below | 1.4.* and below | 0.8.6.RELEASE | dev.miku:r2dbc-mysql:0.8.2 |