有没有办法配置Spring Data Rest以允许非阻塞异步调用? Spring Rest提供@Async注释来异步处理调用。
答案 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调用的方法。