Spring Data Rest异步调用

时间:2017-03-20 20:59:03

标签: spring rest

有没有办法配置Spring Data Rest以允许非阻塞异步调用? Spring Rest提供@Async注释来异步处理调用。

2 个答案:

答案 0 :(得分:0)

当前,Spring Data Rest不支持ReactiveCrudRepository。这是为其打开的门票:DATAREST-933

但是对于常规的Controller / Service / Repository调用,您可以使用以下选项:

非关系数据库:

为了对Spring Data使用非阻塞,请使用以下数据库之一:例如MongoDB,Apache Cassandra和Redis。它们提供了非阻塞驱动程序。 Going reactive with Spring Data

您还必须使用 Mono Flux 类型实现存储库,扩展接口 ReactiveCrudRepository

public interface ReactivePersonRepository
  extends ReactiveCrudRepository<Person, String> {

  Flux<Person> findByLastname(Mono<String> lastname);

  @Query("{ 'firstname': ?0, 'lastname': ?1}")
  Mono<Person> findByFirstnameAndLastname(String firstname, String lastname);
}

以下是使用MongoDB的示例的更多详细信息:Reactive Repositories with MongoDB

关系数据库

由于模块R2DBC,可以将Reactive Repositories与SQL关系数据库一起使用。 Documentation Here

  

R2DBC是反应式关系数据库连接性的首字母缩写。   R2DBC是API规范倡议,它声明了反应性API   由驱动程序供应商实施以访问其关系   数据库。

您可以在此处找到更多示例:Github Examples with R2DBC Spring Framework版本::5.2.0.RELEASE

依赖项:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>io.r2dbc</groupId>
      <artifactId>r2dbc-bom</artifactId>
      <version>${r2dbc-releasetrain.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>

  <!-- other dependency elements omitted -->

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

  <!-- a R2DBC driver -->
  <dependency>
    <groupId>io.r2dbc</groupId>
    <artifactId>r2dbc-h2</artifactId>
    <version>Arabba-RC1</version>
  </dependency>

</dependencies>

这些是以下可用的驱动程序:

  • Postgres(io.r2dbc:r2dbc-postgresql)

  • H2(io.r2dbc:r2dbc-h2)

  • Microsoft SQL Server(io.r2dbc:r2dbc-mssql)

  • MySQL(com.github.mirromutth:r2dbc-mysql)

  • jasync-sql MySQL(com.github.jasync-sql:jasync-r2dbc-mysql)

这是一个使用Github存储库中的 ReactiveCrudRepository 的存储库示例:

import reactor.core.publisher.Flux;

import org.springframework.data.r2dbc.repository.query.Query;
import org.springframework.data.repository.reactive.ReactiveCrudRepository;

/**
 * @author Oliver Gierke
 */
interface CustomerRepository extends ReactiveCrudRepository<Customer, Long> {

    @Query("select id, firstname, lastname from customer c where c.lastname = :lastname")
    Flux<Customer> findByLastname(String lastname);
}

答案 1 :(得分:-1)

@Async用于方法级别,@ EnableAsync是应用级别。 据我所知,这是处理来自Spring Boot应用程序的Async调用的方法。