Spring 使用hibernate envers在web应用程序中审核用户在数据库中所做更改的通用java服务

Spring 使用hibernate envers在web应用程序中审核用户在数据库中所做更改的通用java服务,spring,hibernate,aop,cdc,Spring,Hibernate,Aop,Cdc,我有一个java web应用程序,我想在数据库中为所有数据库更改创建审计日志,如列更改、列中的值更改、用户ID、时间戳和其他一些字段。我想创建一个通用服务,该服务具有针对此类操作公开的方法,并且可以从应用程序中的任何其他组件访问这些方法。据我所知,这可以通过HibernateEnvers或SpringAOP实现。请你给我举个例子,我可以利用它进一步扩展 注意:我不想使用基于触发器的日志记录来审核数据库更改 假设这是我的全部股票;我正在通过hibernate对股票执行一些简单的保存操作。假设我有一

我有一个java web应用程序,我想在数据库中为所有数据库更改创建审计日志,如列更改、列中的值更改、用户ID、时间戳和其他一些字段。我想创建一个通用服务,该服务具有针对此类操作公开的方法,并且可以从应用程序中的任何其他组件访问这些方法。据我所知,这可以通过HibernateEnvers或SpringAOP实现。请你给我举个例子,我可以利用它进一步扩展

注意:我不想使用基于触发器的日志记录来审核数据库更改


假设这是我的全部股票;我正在通过hibernate对股票执行一些简单的保存操作。假设我有一个main方法,我执行下面提到的操作,我不是Spring或Hibernate用户,所以我不知道您需要捕获什么。但如果它只是任何@Entity注释类的setter,那么整个过程基本上如下所示:

驱动程序应用程序:

包de.scrum_master.app; 导入org.hibernate.Session; 导入org.hibernate.Transaction; 公共类应用程序{ 公共静态无效字符串[]args{ System.out.printlnMaven+Hibernate+MySQL; //Session Session=HibernateUtil.getSessionFactory.openSession; //事务tx=session.beginTransaction; 股票=新股票; stock.setStockCode7000; stock.setStockNamez; //session.saveOrUpdatestock; } } 审计方面:

包de.scrum_master.aspect; 导入org.aspectj.lang.JoinPoint; 导入org.aspectj.lang.annotation.Aspect; 导入org.aspectj.lang.annotation.Before; @面貌 公共类DBAuditSpect{ @Beforeexecutionpublic无效集**&&@targetjavax.persistence.Entity&&argssetterArgument public void entitySetterExecutionObject setterArgument,JoinPoint thisJoinPoint{ System.out.printlnthisJoinPoint+-+setterArgument; } } 控制台输出:

Maven+Hibernate+MySQL executionvoid de.scrum_master.app.Stock.setStockCodeString-7000 executionvoid de.scrum_master.app.Stock.setStockNameString-z
关于如何设置和使用Spring AOP的更一般性问题,请参见文档中的章节。

没有任何示例代码作为讨论基础的问题不清楚。请更新问题并更具体。添加代码。具体;我想开发一个通用的服务/组件,它可以跨不同的项目使用,以审核应用程序中表上发生的数据库更改日志。例如:我想有一些拦截器或类似的东西放在这些表上,每当在那个表上执行操作时;更改存储在一个表中。我已经通过Hibernate拦截器实现了这一点,但我想通过SpringAOP实现这一点。
public class App 
{
    public static void main( String[] args )
    {

            //test insert
            tx = session.beginTransaction();
        System.out.println("Maven + Hibernate + MySQL");
       // Session session = HibernateUtil.getSessionFactory().openSession();

        //session.beginTransaction();
        Stock stock = new Stock();

        stock.setStockCode("7000");
        stock.setStockName("z");

        session.saveOrUpdate(stock);

}

Stock.java

import static javax.persistence.GenerationType.IDENTITY;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.persistence.UniqueConstraint;

import com.warp.intercept.*;

/**
* Stock generated by hbm2java
*/

@Entity
@Table(name = "stock", catalog = "mkyong", uniqueConstraints = {
        @UniqueConstraint(columnNames = "STOCK_NAME"),
        @UniqueConstraint(columnNames = "STOCK_CODE") })
public class Stock implements java.io.Serializable, IAuditLog {

    private Integer stockId;
    private String stockCode;
    private String stockName;

    public Stock() {
    }

    public Stock(String stockCode, String stockName) {
        this.stockCode = stockCode;
        this.stockName = stockName;
    }


    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "STOCK_ID", unique = true, nullable = false)
    public Integer getStockId() {
        return this.stockId;
    }

    public void setStockId(Integer stockId) {
        this.stockId = stockId;
    }

    @Column(name = "STOCK_CODE", unique = true, nullable = false, length = 10)
    public String getStockCode() {
        return this.stockCode;
    }

    public void setStockCode(String stockCode) {
        this.stockCode = stockCode;
    }

    @Column(name = "STOCK_NAME", unique = true, nullable = false, length = 20)
    public String getStockName() {
        return this.stockName;
    }

    public void setStockName(String stockName) {
        this.stockName = stockName;
    }