Spring boot 启用 Spring Data JPA Auditing(审计功能)

2023-10-31

一、Auditing功能简介
先贴上Spring Data JPA的官方文档:https://docs.spring.io/spring-data/jpa/docs/2.0.9.RELEASE/reference/html/

项目中每条数据在创建修改的时候,我们都需要记录它创建人,创建时间,修改人,修改时间。如果每次新增的时候都去手动set,代码冗余且显得很不友好

spring data JPA 为我们提供了审计功能,英文是 Auditing
在这里插入图片描述
Auditing包括了四个注解,从名字就能看出它们的作用
@CreatedBy
创建人,在这个实体被insert的时候,会设置值
@LastModifiedBy
最后一次修改人,在这个实体每次被更新的时候,会设置值
@CreatedDate
创建时间,在这个实体被insert的时候,会设置值
@LastModifiedDate
最后一次修改时间,在这个实体每次被更新的时候,会设置值

二、如何启用
1.启动类上加@EnableJpaAuditing注解
在这里插入图片描述
2.实体类上加@EntityListeners(AuditingEntityListener.class)在这里插入图片描述
3.属性上面使用对应注解
在这里插入图片描述
三、使用CreatedBy和LastModifiedBy时,JPA并不知道你的这个字段的值是什么,需要自己实现AuditorAware接口

import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.AuditorAware;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.Optional;

/**
 *  使用@CreatedBy或@LastModifiedBy 则必须实现AuditorAware接口重写getCurrentAuditor方法
 * 在定义使用@CreatedBy或@LastModifiedBy时,属性类型必须与AuditorAware接口的泛型类型相同
 */
@Configuration
public class SpringSecurityAuditorAware  implements AuditorAware<String> {
    @Override
    public Optional<String> getCurrentAuditor() {
        UserDetails userDetails;
        try {
            userDetails =  (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
            return Optional.ofNullable(userDetails.getUsername());
        }catch (Exception e){
            return Optional.empty();
        }

    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring boot 启用 Spring Data JPA Auditing(审计功能) 的相关文章

  • 如何在java中压缩/解压tar.gz文件

    谁能告诉我在java中压缩和解压缩tar gzip文件的正确方法我一直在搜索 但我能找到的最多的是zip或gzip 单独 我写了一个包装器公共压缩 http commons apache org compress called jarchi
  • 获取jdbc中表依赖顺序

    我在 MySQL 数据库中有一组表 A B C D 依赖关系如下 B gt C gt A 和 D gt A 也就是说 A 有一个 PrimaryKey C 有一个外键指向 A 的主键 B 有一个外键指向 C 的主键 类似地 D 有一个外键指
  • 如何降低圈复杂度?

    我正在开发一个将 RequestDTO 发送到 Web 服务的类 我需要在发送请求之前验证该请求 请求可以从 3 个不同的地方发送 并且每个 请求类型 有不同的验证规则 例如请求1必须有姓名和电话号码 请求2必须有地址等 我有一个 DTO
  • 从剪贴板获取图像 Awt 与 FX

    最近 我们的 Java FX 应用程序无法再从剪贴板读取图像 例如 用户在 Microsofts Paint 中选择图像的一部分并按复制 我不是在谈论复制的图像文件 它们工作得很好 我很确定它过去已经有效 但我仍然需要验证这一点 尽管如此
  • Maven 目标的默认阶段?

    据我了解 在 Maven 中 插件目标可以附加到生命周期阶段 如果没有定义 默认阶段是什么 根据我的经验 这取决于插件的目标 例如 组装 单个 http maven apache org plugins maven assembly plu
  • JAX-WS:有状态 WS 在独立进程中失败

    我在 Tomcat 上部署了一个有状态的 Web 服务 它由工厂服务和主要 API 服务组成 并且工作得很好 工厂服务将 W3CEndpointReference 返回到主 API 实例 客户端使用会话 现在 我尝试将相同的服务作为独立应用
  • 代码编译期间遇到警告消息“使用或覆盖已弃用的 API”

    我编译了我的程序并收到以下错误 我该如何解决呢 Note ClientThreadClients java uses or overrides a deprecated API Note Recompile with Xlint depre
  • 为什么一个线程会中断另一个线程[重复]

    这个问题在这里已经有答案了 在Java多线程应用程序中 我们处理InterruptedThreadException 如果另一个线程中断当前线程 则会抛出此异常 现在 当另一个线程知道它将导致异常时 它可能想要中断当前线程的原因是什么 很多
  • 此版本不符合 Google Play 64 位要求,添加库后仍然出现错误

    我正在 Play 商店上传一个视频编辑器应用程序 其中包含带有一些本机代码的库 所以我通过将其添加到 gradle 来使其兼容 64 位 ndk abiFilters armeabi v7a arm64 v8a x86 x86 64 添加了
  • Hystrix是否可以订阅CircuitBreaker开启事件?

    对于单元测试 我希望能够订阅 Hystrix 事件 特别是在断路器打开或关闭时发生事件 我四处寻找示例 似乎解决方法是利用指标流并监视断路器标志 由于 Hystrix 是基于 RxJava 构建的 我认为应该在某个地方有一个事件订阅接口 在
  • 如何将txt文件添加到你的android项目中? [复制]

    这个问题在这里已经有答案了 我的Android studio版本是1 5 1 显然这个 never 版本没有 txt 文件的 asset 文件夹 您打算如何将这些文件包含到您的项目中 以及如何进一步使用您内部的应用程序 谢谢你的建议 Pro
  • 更改 RowLayout SWT Java 中元素的顺序

    有没有办法更改在行布局中创建的元素的顺序 我想将其显示在元素中 首先显示 例如 如果我创建 element1 则 element2 element3 element4 我想看到的布局为 元素4 元素3 元素2 元素1 这意味着最后创建的元素
  • 在多模块项目中访问绑定适配器

    我有一个多模块项目 其中应用程序模块包含我的绑定适配器 而我的功能模块取决于我的应用程序模块 因为它是动态功能模块 应用程序 包含绑定适配器 gt 动态功能模块 存在布局的地方 我在所有模块中启用了数据绑定和 kapt 我无法成功构建应用程
  • 为什么 RMI 注册表忽略 java.rmi.server.codebase 属性

    我正在运行 java RMI 的 Hello World 示例 1 我在空文件夹中运行注册表 motta motta laptop tmp rmiregistry 2 我启动 HTTP 服务器以在运行时检索类 下载文件夹包含客户端 服务器的
  • 无法仅在控制台中启动 androidstudio

    你好 我的问题是下一个 我下载了Android Studio如果我去 路径 android studio bin 我执行studio sh 我收到以下错误 No JDK found Please validate either STUDIO
  • 如何使用 Hibernate Session.doWork(...) 进行保存点/嵌套事务?

    我正在使用 JavaEE JPA 托管事务与 Oracle DB 和 Hibernate 并且需要实现某种嵌套事务 据我所知 此类事情不受开箱即用的支持 但我应该能够为此目的使用保存点 正如建议的https stackoverflow co
  • 如何将任务添加到 gradle 中的主要“构建”任务

    当我尝试使用以下代码将任务添加到主构建任务时 rootProject tasks getByName build dependsOn mytask 当我跑步时它抱怨gradle w build输出 Where Build file line
  • 设计抽象类时是否应该考虑序列化问题?

    一般来说这个问题来自Eclipse建议在抽象类上添加串行版本UID 由于该类是抽象类 因此该类的实例永远不会存在 因此它们永远不会被序列化 只有派生类才会被序列化 所以我的问题是放置一个安全 SuppressWarnings serial
  • 无法在 BlackBerry Playbook 上设置音量

    我在更改黑莓游戏书的音量时遇到问题 首先 我将 Android 应用程序重新打包到 Palybook 应用程序 我需要使用搜索栏更改黑莓剧本的音量 并在搜索监听器中设置音频管理器音量 这是代码 audioManager AudioManag
  • Java:基于 Web 的应用程序中的单例类实例

    我在 Web Application 中有这个 Singleton 类 public class MyDAO private static MyDAO instance private MyDAO public static MyDAO g

随机推荐

  • h-a-p-p-e-n-before原则的理解

    happen before 可真是一个经典又老生常谈的话题 规则一共就八条 但看起来总有种抓不住重点的感觉 今天再整理一下对这八条规则的理解 首先我的理解是 happen before 的语义与在什么什么之前发生完全没有关系 其语义是如果
  • 网络安全实验室 综合关 解析

    网站地址 http hackinglab cn ShowQues php type pentest 第一关 渗透测试第一期 先看看 登录界面 发现可以注册和忘记密码 忘记密码可以重置密码 思路如下 重置admin密码 发现 不能直接重置密码
  • 【赠书活动|第四期《互联网广告系统:架构、算法与智能化》】

    文章目录 内容简介 作者简介 读者对象 大咖推荐 抽奖方式 本期中奖者 广告平台的建设和完善是一项长期工程 例如 谷歌早于2003年通过收购Applied Semantics开展Google AdSense 项目 而直到20年后的今天 谷歌
  • sql连接查询

    sql连接查询 单表查询 student表 select 列名 from 表名 查看全表 SELECT FROM student 可以匹配为全选 在student表中查找赵六的信息 SELECT FROM student WHERE sna
  • 插入时出现MyBatisSystemException: nested exception is

    检查完xml文件没错后 还是出现错误 org mybatis spring MyBatisSystemException nested exception is org apache ibatis binding BindingExcept
  • SourceInsight4.0黑色背景主题

    SourceInsight4 0黑色背景主题 在网上找了一通花了好多积分最后发现只改了代码区 左右代码索引文件列表和函数调用关系图都还是白底 最后自己在设置里面找了找 发现在这个版本中SI已经内置了一些常用的主题配色 先放效果图 设置在这里
  • JAVA设计模式(21) —装饰(Decorator)模式

    定义 动态的给一个对象添加一些额外的职责 就增加功能来说 Decorator模式相比生成子类更为灵活 类型 对象结构型模式 别名 包装模式 Wrapper 类图 Decorator装饰模式是一种结构型模式 它主要是解决 过度地使用了继承来扩
  • Python3实现通过HTTP协议进行文件上传及下载

    要实现这个功能 你需要在主机A上编写一个Python程序 该程序监听HTTP上传请求并处理上传的文件 同时 在主机B上 你可以使用任何支持HTTP POST请求的工具 如curl或浏览器插件 上传文件 以下是一个简单的实现示例 在主机A上的
  • Python opencv学习-4在图片上用鼠标绘制矩形区域、绘制矩形框、曲线等

    程序功能鼠标按下 拖拽生成矩形框 缺陷 拖过的区域涂黑 而且不彻底 后期换写法测试 基本逻辑 鼠标按下松开 获取坐标 绘制矩形等 未看明白如何获取到的初始坐标和结束坐标 x y从哪获取的值 import numpy as np import
  • Node.js 入门 —— 中间件

    文章目录 1 前言 2 中间件的概念 2 1 什么是中间件 2 2 中间件的调用流程 2 3 Express 中间件的格式 3 express 中间件 3 1 定义中间件函数 3 2 全局生效的中间件 3 3 局部生效的中间件 3 4 中间
  • 深度学习------keras,torch对mnist,cifar2,cifar3,cifar10数据集的读取总结

    1 tensorflow读取 1 1 mnist数据集 import tensorflow as tf from tensorflow keras datasets import mnist cifar10 cifar100 train x
  • mysql与java编写人事管理系统,java+mysql企业人事管理系统的设计

    摘 要 随着历史脚步的前进 我们步入了科技高速发展的二十一世纪 互联网技术得到了空前发展 极大地提高了人们工作的效率 改善了人们的工作生活 产业信息化管理已经成为提高企业生产与管理效率的首要选择 然而 在人事管理模块 国内的很多中小型企业依
  • 错误:非法字符:“\ufeff”

    导入开源的项目的时候 你可以碰到以上的编码问题 这一般这个项目是用eclipse开发的 主要原因是 Eclipse可以自动把UTF 8 BOM文件转为普通的UTF 8文件 但Android Studio需要重新转一下 解决方法 将编码格式U
  • Java序列化

    目录 序列化机制 transient 关键字 序列化对象 反序列化对象 序列化机制 Java 提供了一种对象序列化的机制 该机制中 一个对象可以被表示为一个字节序列 该字节序列包括该对象的数据 有关对象的类型的信息和存储在对象中数据的类型
  • 重定向丢失cookie问题

    风和日丽 阳光明媚 生产bug来了 java 设定的cookie值 重定向后这个cookie获取不到 竟然奇怪的不见了 先说解决办法 通过设置domain path可以获取到这个cookie 记住 这个要考的 domain 是域 path
  • ubuntu18.04启动时在Starting Gnome Display Manager出现问题

    Ubuntu开机一直卡在 OK Started GNOME Display Manager处 进不去系统 当你进不了系统的时候你是打不开终端的 原因 磁盘空间已满或更新异常 解决 1 按alt ctrl F1 F6 输入用户名和密码 2 输
  • 人脸识别三大经典算法_[AI频道]人脸识别商业化应用开发指南

    壹点方圆 AI频道 人工智能商业化 技术 产品与应用 一 人脸识别基本原理及应用领域 二 商业化落地中的关键点 三 从0到1快速搭建人脸识别应用 一 人脸识别基本原理及应用领域 从人工智能技术演进曲线来看 人脸识别技术目前正处于爆发阶段 并
  • 西门子828d车削编程技术_干!货!来!啦!西门子数控系统车削加工编程合集...

    哈喽 艾瑞巴蒂 如昨天预告所说 今天我们一大早就送来了诚意满满的干货 小伙伴们是不是在车床加工时遇到过手拿图纸 但不知该如何下手 如何在控制器里编程 程序开头和结尾有啥注意事项 子程序怎样编写 怎么保证螺纹的切削效果 车铣复合如何编程 等等
  • 计算机英语名词简释(轉載)

    计算机英语名词简释 一 著名公司及其商标名 Microsoft 有时缩略为MS 是全球最著名的软件商 美国软件巨头微软公司的名字 Microsoft其实是由两个英语单词组成 Micro意为 微小 Soft意为 软的 此处应为 Softwar
  • Spring boot 启用 Spring Data JPA Auditing(审计功能)

    一 Auditing功能简介 先贴上Spring Data JPA的官方文档 https docs spring io spring data jpa docs 2 0 9 RELEASE reference html 项目中每条数据在创建