前言
由于创建时间、修改时间、创建人、修改人这些字段是属于非业务字段,如果能让程序自动帮我们赋值,那么我们在写业务代码时就只需要关注业务逻辑。
实现步骤如下:
- Spring Boot 2.4.0或以上才得以支持ReactiveAuditorAware
- 在配置类上添加@EnableR2dbcAuditing 注解。
@Configuration
@EnableR2dbcAuditing
public class RepositoryConfiguration {
}
- 在配置类中声明一个ReactiveAuditorAware。当ReactiveAuditorAware bean可用时,它将自动赋值实体类中的由@CreatedBy和@LastModifiedBy注释的字段
@Configuration
@EnableR2dbcAuditing
public class RepositoryConfiguration {
/**
* 相当于实现ReactiveAuditorAware,这里是给@CreatedBy赋值的
* <p>创建时间和修改时间,r2dbc底层会自动去判断并生成</p>
* @return
*/
@Bean
ReactiveAuditorAware<String> auditorAware() {
return () -> Mono.just("system");
}
}
- 实体对象属性添加对应注解
@CreatedDate
@LastModifiedDate
@CreatedBy
@LastModifiedBy
@Getter
@Setter
public abstract class BaseModificationAwareEntity {
/**
* 创建时间。
*/
@Column("created_at")
@CreatedDate
private LocalDateTime createdAt;
/**
* 修改时间。
*/
@Column("modified_at")
@LastModifiedDate
private LocalDateTime modifiedAt;
/**
* 创建人。
*/
@Column("created_by")
@CreatedBy
private String createdBy;
/**
* 修改人。
*/
@Column("modified_by")
@LastModifiedBy
private String modifiedBy;
protected BaseModificationAwareEntity() {
}
}
这样下来 业务代码中就无需关心那些非业务字段
@Nonnull
@Override
@Transactional(rollbackFor = Exception.class)
public Mono<App> create(@Nonnull CreateApp app) {
Contracts.notNull(app, "app");
var entity = new App();
entity.setName(app.getName());
entity.setRemarks(app.getRemarks());
entity.setKey(generateKey());
entity.setSecret(generateSecret());
return appRepository.save(entity);
}
参考文章:
[1] Data Auditing With Spring Data R2dbc
[2] Spring 官方文档