spring jpa 审计功能自定义填充字段

亦凉 2023-03-13 05:08 126阅读 0赞

spring data jpa 通过@CreateBy等注解实现了审计功能(在新建或者修改的时候自动填充某些字段) 但是当我们有多个字段需要填充的时候就不满足了 这就需要我们自己实现相关接口来实现自动填充
有两种方式一种是实现 auditable接口 但是这样会在实体类中莫名增加很多setter getter方法 会对序列化造成干扰 所以不推荐
我推荐的是第二种方法 重写Listener
具体步骤:

  1. 在configration 类开启审计功能

    @SpringBootApplication
    @EnableJpaAuditing
    public class Config() {
    }

  2. 实现entity通用继承类 指定自定义的listener

    @EntityListeners({ CustomAuditingListener.class})
    public class Base{

    1. private Long id;
    2. private Long creator;
    3. private String creatorName;
    4. private Long modifier;
    5. private String modifierName;
    6. ... 省略setter getter

    }

  3. 实现自定义listener 其中有两个核心的接口 @PrePersist 和 @PreUpdate 第一个是在保存的前置方法(新增 和 更新) 第二个是更新的前置方法 通过这两个方法就可以实现自己填充

    @Configurable
    public class CustomAuditingListener implements ConfigurableObject {

    1. public AuditListener() {
    2. }
    3. @Autowired
    4. private AuditHandler auditHandler;
    5. @PrePersist
    6. private void prePersist(Object obj) {
    7. auditHandler.prePersist(obj);
    8. }
    9. @PreUpdate
    10. private void preUpdate(Object obj) {
    11. auditHandler.preUpdate(obj);
    12. }

    }

  4. 实现自定义的 AuditHandler

    @Component
    public class CustomAuditHandler implements AuditHandler {

    1. @Override
    2. public void prePersist(Object obj) {
    3. if (obj instanceof Base) {
    4. Base ae = (Base) obj;
    5. if (ae.getId() == null) {
    6. this.markForCreate(ae);
    7. }
    8. }
    9. }
    10. @Override
    11. public void preUpdate(Object obj) {
    12. if (obj instanceof Base) {
    13. Base ae = (Base) obj;
    14. this.markForUpdate(ae);
    15. }
    16. }
    17. public void markForCreate(Base be) {
    18. ae.setCreator("自己获取的用户id");
    19. ae.setCreatorName("自己获取的用户名称");
    20. }
    21. public void markForUpdate(Base ae) {
    22. ae.setModifier("自己获取的用户id");
    23. ae.setModifierName("自己获取的用户名称");
    24. }

    }*/

发表评论

表情:
评论列表 (有 0 条评论,126人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Spring Data JPA审计

    Spring Data JPA为跟踪持久性层的变化提供了很好的支持。通过使用审核,我们可以存储或记录有关实体更改的信息,例如谁创建或更改了实体以及何时进行更改。 我们可以利用

    相关 spring data-审计(auditing)功能

    前言 日常开发中,经常会遇到实体有创建时间,更新时间,创建人,更新人等字段。这些字段不是核心的业务字段,但是对于跟踪数据记录却非常重要。由于重要程度不是那么高,经常会忘了