使用pring-data-r2dbc时如何解决spring TransactionSynchronizationManager.currentTransaction中的NoSuchMethodError

时间:2019-10-30 17:04:48

标签: spring spring-data-r2dbc

我正在编写基于Spring webflux的服务,该服务使用r2dbc从PostgreSQL读取数据。我需要使用最新版本的r2dbc,但是在使用TransactionSynchronizationManager spring-tx 5.2.0.RELEASE库时出现NoSuchMethodError异常。

我基本上需要知道什么是正确的spring-tx库版本,才能与spring-data-r2dbc的版本兼容,后者可以与最新的r2dbc-postgresql和r2dbc-spi库正常工作。

这是我的Maven依赖项。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

<dependency>
          <groupId>org.springframework.data</groupId>
          <artifactId>spring-data-r2dbc</artifactId>
          <version>1.0.0.M2</version>
</dependency>

<dependency>
          <groupId>io.r2dbc</groupId>
          <artifactId>r2dbc-postgresql</artifactId>
          <version>0.8.0.RC2</version>
</dependency>

<dependency>
    <groupId>io.r2dbc</groupId>
    <artifactId>r2dbc-spi</artifactId>
    <version>0.8.0.M8</version>
</dependency>

我正在使用扩展接口ReactiveCrudRepository的接口来按以下方式检索表数据。

@Query("...")
Flux<QuoteHistory> findAllBySecIdAndDateTimeBetweenAndUpdateTypeIn(LocalDate date, Long secId);

我能够使这段代码与早期版本的r2dbc-postgresql和r2dbc-spi一起使用,但是现在我遇到了以下异常。

  

java.lang.NoSuchMethodError:org.springframework.transaction.reactive.TransactionSynchronizationManager.currentTransaction()Lreactor / core / publisher / Mono;       在org.springframework.data.r2dbc.connectionfactory.ConnectionFactoryUtils.doGetConnection(ConnectionFactoryUtils.java:88)〜[spring-data-r2dbc-1.0.0.M2.jar:1.0.0.M2]       在org.springframework.data.r2dbc.connectionfactory.ConnectionFactoryUtils.getConnection(ConnectionFactoryUtils.java:70)〜[spring-data-r2dbc-1.0.0.M2.jar:1.0.0.M2]       在org.springframework.data.r2dbc.core.DefaultDatabaseClient.getConnection(DefaultDatabaseClient.java:189)〜[spring-data-r2dbc-1.0.0.M2.jar:1.0.0.M2]

这些是可与代码一起使用的r2dbc依赖项。

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-r2dbc</artifactId>
    <version>1.0.0.M1</version>
</dependency>
<dependency>
    <groupId>io.r2dbc</groupId>
    <artifactId>r2dbc-postgresql</artifactId>
    <version>1.0.0.M7</version>
</dependency>

1 个答案:

答案 0 :(得分:0)

请使用以下依赖项组合:

  • R2DBC Postgres:0.8.0.RC2
  • R2DBC SPI:0.8.0.RC2
  • Spring Data R2DBC:1.0.0.RC1
  • Spring框架:5.2.0.RELEASE

或者,转到https://start.spring.io,以获得一个具有相互协作版本的依赖项管理的项目。