• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

解析Spring Data JPA的Audit功能之审计数据库变更

java 搞代码 4年前 (2022-01-09) 16次浏览 已收录 0个评论
文章目录[隐藏]

一、数据库审计

数据库审计是指当数据库有记录变更时,可以记录数据库的变更时间和变更人等,这样以后出问题回溯问责也比较方便。对于审计表记录的变更可以两种方式,一种是建立一张审计表专门用于记录,另一种是在数据库增加字段。本文所讨论的是第二种方案。

那如何在新增、修改、删除的时候同时增加记录呢?如果每张表都单独记录,代码就会显得很冗余。更好的方式应该是做切面或者事件监听,当数据有变更时统一进行记录。

二、Spring Data JPA审计

Spring Data JPA为我们提供了方便的Audit功能,通过四个注解来标记字段:

(1) @CreatedBy: 创建人

(2) @CreatedDate: 创建时间

(3) @LastModifiedBy: 最后修改人

(4) @LastModifiedDate: 最后修改时间

接下来我们来看看怎么使用。

2.1、项目准备

通过Docker启动PostgreSQL数据库:

docker run -itd \

    –name pkslow-postgres \

    -e POSTGRES_DB=pkslow \

    -e POSTGRES_USER=pkslow \

    -e POSTGRES_PASSWORD=pkslow \

    -e PGDATA=/var/lib/postgresql/data/pgdata \

    -p 5432:5432 \

    postgres:10

引入相关依赖:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifa<b>本文来源gao@!dai!ma.com搞$$代^@码5网@</b>ctId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
  <groupId>org.postgresql</groupId>
  <artifactId>postgresql</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-security</artifactId>
</dependency>

Spring Security不是必须的,这里使用它来获取用户名。配置的用户为:

spring.security.user.name=pkslow
spring.security.user.password=123456

2.2、创建实体父类

其实父类不是必须的,你可以在每个想Audit的实体类进行配置,但比较麻烦,不如创建一个父类,再让想审计的子类都继承它:

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class Auditable<U> {
    @CreatedBy
    @Column(name = "created_by")
    private U createdBy;

    @CreatedDate
    @Column(name = "created_date")
    private Date createdDate;

    @LastModifiedBy
    @Column(name = "last_modified_by")
    private U lastModifiedBy;

    @LastModifiedDate
    @Column(name = "last_modified_date")
    private Date lastModifiedDate;
  // getter
  //setter
}

@MappedSuperclass可以让其它子实体类继承相关的字段和属性;

@EntityListeners设置监听类,会对新增修改进行回调处理。

有了父类之后,子类就简单了:

@Entity
@Table(name = "pkslow_users")
public class User extends Auditable<String> {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long userId;
    private String name;
    private String email;
    private String country;
    private String website;
  //getter setter
}

2.3、如何获取名字


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:解析Spring Data JPA的Audit功能之审计数据库变更

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址