Spring Data R2dbc 审计功能 对非业务字段自动赋值

前言

由于创建时间、修改时间、创建人、修改人这些字段是属于非业务字段,如果能让程序自动帮我们赋值,那么我们在写业务代码时就只需要关注业务逻辑。

实现步骤如下:

  1. Spring Boot 2.4.0或以上才得以支持ReactiveAuditorAware
  2. 在配置类上添加@EnableR2dbcAuditing 注解。
@Configuration
@EnableR2dbcAuditing
public class RepositoryConfiguration {
    
}
  1. 在配置类中声明一个ReactiveAuditorAware。当ReactiveAuditorAware bean可用时,它将自动赋值实体类中的由@CreatedBy和@LastModifiedBy注释的字段
@Configuration
@EnableR2dbcAuditing
public class RepositoryConfiguration {
    /**
     * 相当于实现ReactiveAuditorAware,这里是给@CreatedBy赋值的
     * <p>创建时间和修改时间,r2dbc底层会自动去判断并生成</p>
     * @return
     */
    @Bean
    ReactiveAuditorAware<String> auditorAware() {
        return () -> Mono.just("system");
    }
}
  1. 实体对象属性添加对应注解
    @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 官方文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Spring Data R2DBCSpring框架为响应式数据库操作提供的模块。R2DBC是Reactive Relational Database Connectivity的缩写,它是一种基于响应式编程模型的数据库访问方式。相比传统的阻塞式JDBC,R2DBC允许在异步非阻塞的环境下进行数据库操作。 使用Spring Data R2DBC,你可以通过定义接口和方法来实现对响应式数据库的操作。它提供了一套统一的API,支持常见的关系型数据库(如MySQL、PostgreSQL等)。 以下是一个简单的示例,展示了如何使用Spring Data R2DBC进行数据库操作: ```java import org.springframework.data.annotation.Id; import org.springframework.data.relational.core.mapping.Column; import org.springframework.data.relational.core.mapping.Table; @Table("users") public class User { @Id private Long id; @Column("name") private String name; // Getters and setters } @Repository public interface UserRepository extends ReactiveCrudRepository<User, Long> { Flux<User> findByName(String name); } @Service public class UserService { private final UserRepository userRepository; public UserService(UserRepository userRepository) { this.userRepository = userRepository; } public Flux<User> findUsersByName(String name) { return userRepository.findByName(name); } } ``` 在上述示例中,我们定义了一个User实体类,并使用@Table和@Id注解进行映射。然后创建了一个UserRepository接口,继承自ReactiveCrudRepository,这个接口提供了一些基本的CRUD方法,并支持响应式的返回类型。最后,在UserService中使用UserRepository进行数据库操作。 通过Spring Data R2DBC,你可以使用像Flux和Mono这样的响应式类型来处理数据流,以实现异步非阻塞的数据库操作。这使得你可以更好地利用系统资源,提高系统的响应性能。 希望这个简单的示例能够帮助你理解Spring Data R2DBC的基本用法。如果需要更详细的信息,可以查阅Spring官方文档或参考其他资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值