paopao/docs/guides/JPA审计.md

65 lines
3.5 KiB
Markdown
Raw Permalink Normal View History

2024-05-11 10:05:44 +08:00
`@EnableJpaAuditing` 是 Spring Data JPA 提供的一个注解,用于启用 JPA 审计功能。这个功能可以自动记录实体的创建和修改信息,包括创建时间和创建者,最后修改时间和最后修改者等信息。这对于跟踪记录数据变更历史非常有用,尤其是在需要审计和日志记录的业务场景中。
@EnableJpaAuditing 是一个Spring框架中的注解主要用于启用JPA审计功能Auditing。审计功能允许你自动跟踪和管理实体对象的创建、更新等元数据信息如记录谁在何时创建或修改了一条记录。这一特性对于日志记录、数据追踪以及安全审计等方面非常有用。下面是对@EnableJpaAuditing的详细介绍和使用方法
功能介绍
- 自动填充字段通过审计功能你可以自动为实体类的某些字段如创建时间createdDate、最后修改时间lastModifiedDate、创建人createdBy、最后修改人lastModifiedBy等填充值而无需在业务逻辑中手动设置。
- AuditorAware 接口Spring Data JPA 提供了AuditorAware接口允许你自定义获取当前操作用户的逻辑。当实体类中有@CreatedBy或@LastModifiedBy注解的字段时Spring会调用实现了AuditorAware接口的类来获取当前用户信息。
- 注解支持:审计功能主要通过以下四个注解实现:
> @CreatedDate标记一个字段用于存储创建日期和时间。
> @LastModifiedDate标记一个字段用于存储最后修改的日期和时间。
> @CreatedBy标记一个字段用于存储创建此记录的用户。
> @LastModifiedBy标记一个字段用于存储最后修改此记录的用户。
以下是 `@EnableJpaAuditing` 的使用步骤和介绍:
2024-05-12 16:20:44 +08:00
1. **注解配置类**
- 在你的 Spring Boot 应用的配置类上使用 `@EnableJpaAuditing` 注解,以启用审计功能。这通常在主配置类或者专门的 JPA 配置类上进行。
2024-05-11 10:05:44 +08:00
```java
@Configuration
@EnableJpaRepositories(basePackages = "com.example.repositories")
@EntityScan(basePackages = "com.example.models")
@EnableJpaAuditing
public class JpaConfig {
// 其他配置...
}
```
2024-05-12 16:20:44 +08:00
- 也可以在应用程序启动类中添加 `@EnableJpaAuditing` 注解。
```java
@SpringBootApplication
@EnableJpaAuditing
public class MyApplication {
}
```
2024-05-11 10:05:44 +08:00
2. **实体类注解**:在实体类中,使用 `@CreatedDate``@CreatedBy` 等注解来标记需要自动填充的字段。
```java
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
@EntityListeners(AuditingEntityListener.class)
public class AuditableEntity {
@Id
private Long id;
@CreatedDate
private Instant createdDate;
@CreatedBy
private String createdBy;
// 其他字段...
}
```
3. **审计触发**:当实体被插入(`insert`)或更新(`update`Spring Data JPA 会自动触发审计逻辑,根据 `AuditorAware` 提供的信息填充 `@CreatedDate`、`@CreatedBy`、`@LastModifiedDate` 和 `@LastModifiedBy` 注解的字段。
4. **注意事项**:使用 `@EnableJpaAuditing` 时,需要注意以下几点:
- 确保你的实体类使用了 `@EntityListeners(AuditingEntityListener.class)` 注解。
- 审计功能依赖于实体的生命周期事件,因此它不会在通过 JDBC 直接操作数据库时触发。