spring boot 使用审计

本文介绍如何通过Spring Boot和JPA实现自动审计功能,包括创建User实体类、配置审计监听器、实现审计信息自动填充等步骤,并解决了时间戳精度问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建User类 测试类只有一个name属性

@Entity
@Table(name = "UcenterUser")
@Data
public class User  extends BaseEntity{
    private  String name;
}

抽取一个基类BaseEntity

@EntityListeners(AuditingEntityListener.class)  添加监听器
@MappedSuperclass
@Getter
@Setter
public class BaseEntity {
    @Id
    @GeneratedValue(generator = "IDGenerator")
    @GenericGenerator(name = "IDGenerator",strategy = "uuid2")
    private String id;

    @CreatedDate
    private Date gmtCreate;

    @CreatedBy
    private String createUserId;

    @LastModifiedDate
    private Date gmtModified;

    @LastModifiedBy
    private String updateUserId;

}

创建配置类

@Configuration
@EnableJpaAuditing 这个会创建该功能的相关类
public class AuditorConfiguration {
    public AuditorConfiguration(){
        System.out.println("spring容器启动初始化----审计配置");
    }
    @Bean
    public AuditorAware<User> auditorProvider() { 自定义一个审计信息获取一些用户信息
        return new AuditorAware(){
            @Override
            public Optional<String> getCurrentAuditor() {
                Random random = new Random();
                String str = ""+random.nextInt(100021);
                System.out.println("用户名-----------"+str);
                return Optional.of(str);
            }
        };
    }

}

创建Dao接口  这里使用jpa相关功能

@Repository
public interface UserRepository extends JpaRepository<User,String>{
}

相关测试接口

@RestController
@SpringBootApplication
public class WkApplication {
	@Autowired
    UserRepository userRepository;



	@RequestMapping("/")
	Object home(){ 创建用户
        User user1 = new User();
        user1.setName("zymdfhf");
        userRepository.save(user1);
	return userRepository.findAll();
	}

	@RequestMapping("/{id}")
	Object test1(@PathVariable("id")User user){
		System.out.println(user); 
		Random random = new Random();
        user.setName(""+random.nextInt(100000));
        userRepository.flush();  修改用户来测试审计信息更新
        return user;
	}

	public static void main(String[] args) {
		SpringApplication.run(WkApplication.class, args);
	}
}

运行项目访问 创建了一个user 并自动插入里相关字段


接着调用修改接口修改了name值   执行修改



自动写值成功了。。。。

出现了一个新的问题 gmtCreate的时间精度出现问题

修改BaseEntity类

@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
@Getter
@Setter
public class BaseEntity {
    @Id
    @GeneratedValue(generator = "IDGenerator")
    @GenericGenerator(name = "IDGenerator",strategy = "uuid2")
    protected String id;

    @CreatedDate
    @Temporal(TemporalType.TIMESTAMP)
    @Column(columnDefinition="datetime(3)")
    protected Date gmtCreate;

    @CreatedBy
    protected String createUserId;

    @LastModifiedDate
    @Temporal(TemporalType.TIMESTAMP)
    @Column(columnDefinition="datetime(3)")
    protected Date gmtModified;

    @LastModifiedBy
    protected String updateUserId;

}

重新进行以上步骤就行了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值