- 官网 https://docs.spring.io/spring-data/r2dbc/docs/1.1.9.RELEASE/reference/html/#r2dbc.repositories
- 依赖:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-r2dbc</artifactId>
<version>1.1.9.RELEASE</version>
</dependency>
实体类id 注解 : 不是 javax.persistence.Id ,而是 org.springframework.data.annotation.Id
JPA 中的关系映射,如 @ManyToOne @OneToMany等,在R2DBC中不支持,所以遇到有关联的时候,需要我们自己处理
不支持 类似的JPA 中的Specifications分页查询 ,使用 Specifications 来查询分页内容,但是 R2DBC支持 Pageable分页查询,比JPA稍微麻烦一些
启用 Auditing: @EnableR2dbcAuditing
数据库连接:
spring.r2dbc.url=r2dbc:postgresql://10.103.21.143:5450/数据库名?schema=schema名
spring.r2dbc.username=
spring.r2dbc.passweord=
spring.r2dbc.pool.enabled=true
spring.r2dbc.pool.initial-size=1
spring.r2dbc.pool.max-size=5
spring.r2dbc.pool.min-idle=1
spring.r2dbc.pool.max-idle-time=30m
spring.r2dbc.pool.max-life-time=60000
spring.r2dbc.pool.validation-query=SELECT 1
- 多线程同时修改数据库同一条数据, 乐观锁version 失败,需要重试( 是整个逻辑从头再来,不是重新保存数据 ):
// 定义重试策略
RetryBackoffSpec retrySpec = Retry
.backoff(3, Duration.ofMillis(100))
.maxBackoff(java.time.Duration.ofSeconds(5))
.jitter(0.5);
// 在Mono上应用重试策略
Mono<String> retryMono = mono.retryWhen(retrySpec).doOnError(e->
{
log.error("retry 3 times fail {}",e.getMasseage());
//重试失败后的逻辑
}
);