首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

Java 做一个记录修改日志功能,大家有什么好的方法推荐吗

  •  
  •   fanmouji · 132 天前 via iPhone · 1281 次点击
    这是一个创建于 132 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如:bean 有 name,age 两个属性,原记录值是 name:a,age:20,有人修改成了 name:b,age:21,系统要记录何人何时何地做了什么修改(“管理员,07-29 15:00,ip:1.1.1.1 ”修改内容:“ name:a->b,age:20->21 ”);
    硬编码要改太多了,想问问大家有没有低入侵,注解的方法实现,谢谢!
    10 回复  |  直到 2019-07-30 13:57:16 +08:00
        1
    msaionyc   132 天前   ♥ 1
    Spring AOP,对特定的方法名进行拦截,通过获取参数就可以判断这些了
    直接注解就可以用,就一个类
        2
    sesmond   132 天前   ♥ 1
    这不很容易么,要在 service 层拦截直接加注解然后更新前查询出来比较下。
    要在 dao 层拦截那如果 mybatis 的话就用 mybatis 拦截器直接控制。
    取用户也直接用 HttpServiletRequest 取出来
        3
    gz911122   132 天前   ♥ 1
    数据库抽象出个服务对外提供修改

    不直接修改数据库

    服务修改数据库的时候记录修改内容和调用方
        4
    stevenkang   132 天前   ♥ 1
    @PrePersist
    void prePersist() {
    log.save(this)
    }
        5
    ourslay   132 天前   ♥ 1
    MDC 了解下?
        6
    StevenTong   132 天前   ♥ 1
    前后对象都转成 json 然后用 jsondiff 库判断一下变更?
        7
    chocotan   132 天前   ♥ 4
    JaVers — Object auditing and diff framework for Java
    https://javers.org
        8
    linuxsteam   131 天前 via Android
    我用反射写过 aop 没用过 我遇到的问题就是很二的用 if 处理 string 转成 bigdecmal 的转换
        9
    linuxsteam   131 天前 via Android
    @chocotan 大佬的回复 符合要求 有没有中文相关例子啊 百度发现例子太少了
        10
    razertory   131 天前
    我之前的做法是,在 API 层设置了两个切入点。分别在调用 service 之前和之后都获取当时的系统快照,随后异步处理两个快照产生日志
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   774 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 21:28 · PVG 05:28 · LAX 13:28 · JFK 16:28
    ♥ Do have faith in what you're doing.