Java 使用AOP和Spring Boot的多审计表

Java 使用AOP和Spring Boot的多审计表,java,spring-boot,aop,Java,Spring Boot,Aop,我想创建一个审计方面,它将根据设计按某些主要实体类型存储不同的审计。我创建了类似于@Auditing的注释,其中定义了audit类型变量。这将在方法级别进行注释。我在哪里添加审计表用于方面设计中主实体的逻辑 举个例子: @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Auditing { Event event(); } 外观设计: @Aspect @Component

我想创建一个审计方面,它将根据设计按某些主要实体类型存储不同的审计。我创建了类似于
@Auditing
的注释,其中定义了audit类型变量。这将在方法级别进行注释。我在哪里添加审计表用于方面设计中主实体的逻辑

举个例子:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Auditing {

   Event event();
}
外观设计:

@Aspect
@Component
public class AuditAspect {

    @AfterReturning(value = "@annotation(auditable)")
    public void save(Auditing audit) {

        Audit auditInfo = new Audit();
        // I plan to add some condition here by entity type
    }
}

我计划在审计实体创建之后添加一些条件,比如“按类型哪个表用于审计存储”?这是否好?

如果您担心性能,据我所知,在应用程序引导过程中,代码只被编织到您自己的代码中一次,因此没有问题

基本上是这样一种方法:

@Auditing
public void test(){
  // method logic
}
变成

@Auditing
public void test(){
   Audit auditInfo = new Audit();
  // extra auditing logic...

  // method logic
}
因此,只要aspect方法主体不是执行时间长的对象,就不会有问题。但是,如果审计方面也访问数据库,并且经常调用您的审计方法,那么您可能会有很大的开销。最好将所有审核更新添加到一个集合中,并以批处理方式定期执行它们

现在,关于表断言代码应该放在哪里,我的观点是在方面中。否则,您将不得不为每个表创建不同的方面,这些方面首先要解决问题。但是,请检查是否可以将表名作为注释参数传递,并在方面中访问它

理想的情况是:

@Auditing(tableName="AUDIT_TABLE_1")
public void auditableMethod() {
  // logic
}

@Aspect
public void audit(Auditing audit) {
  String table = audit.tableName;
  // do your jdbc logic
}

对不起,我有不同的问题,不是关于性能。我正在按实体类型将审计存储到不同的表中。那么我的问题是,我应该把代码放在哪里?请提供一个关于如何访问数据库的示例。是通过JPA吗?JDBC?Spring数据?它的JDBC。。(jdbc模板)。我想对多个审计实体使用公共可审计注释,比如用户审计实体,业务审计实体,比如wise。我将使用不同的方面选项。那会更好,谢谢。