2017-06-26 4 views
0

Ich möchte Audit-Aspekt erstellen, die verschiedene Auditing von einigen Haupt-Entitätstyp nach Design speichern wird. Ich habe eine Annotation wie @Auditing erstellt, in der ich die Audit-Typ-Variable definiert habe. Dies wird auf Methodenebene kommentiert. Wo füge ich Logik hinzu, für die die Audit-Tabelle die Haupteinheit im Aspect Design verwendet?Mehrere Audit-Tabelle mit AOP und Spring-Boot

Nur Beispiel:

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

    Event event(); 
} 

Aspect Design:

@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 like Which table is use for audit store by type? is this good? 


    } 


} 

Ich plane eine Bedingung hinzuzufügen, nachdem Einheit Prüfung erstellen wie Which Tabelle Verwendung für Audit Speicher nach Typ ist? ist das gut?

Antwort

0

Wenn Sie sich Sorgen über die Leistung machen, wird aus meinem Wissen Aspect Code in Ihrem eigenen Code nur einmal während der Anwendung Bootstrapping gewebt, so dass es kein Problem gibt.

im Wesentlichen eine Methode wie folgt aus:

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

wird

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

    // method logic 
} 

so lange, wie der Aspekt Methode Körper nicht etwas mit einer langen Ausführungszeit ist, dass Sie nicht ein Problem haben sollte. Wenn jedoch der Prüfungsaspekt auch auf die Datenbank zugreift und Ihre überwachten Methoden häufig aufgerufen werden, kann dies zu erheblichen Kosten führen. Es wäre wahrscheinlich besser, alle Überwachungsaktualisierungen in einer Sammlung hinzuzufügen und sie regelmäßig in einer Stapelverarbeitung auszuführen.

Jetzt in Bezug auf, wo Sie die Tabelle Assertion Code setzen sollte, ist meine Meinung in diesem Aspekt. Andernfalls müssten Sie für jede Tabelle verschiedene Aspekte erstellen, die den Punkt an erster Stelle übertreffen. Überprüfen Sie jedoch, ob Sie den Tabellennamen tatsächlich als Annotationsparameter übergeben können und auf diesen in Ihrem Aspekt zugreifen können.

Was würden Sie im Idealfall wollen, ist:

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

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

sorry, ich habe andere Frage nicht über die Leistung. Ich speichere Audit in verschiedenen Tabellen nach Entitätstypen. also meine Frage wo sollte ich diesen Code setzen? – NFE

+0

Bitte geben Sie ein Beispiel an, wie Sie auf die Datenbank zugreifen. Ist es über JPA? JDBC? Frühlingsdaten? – Konstantine

+0

Sein JDBC .. (JDBCTemplate). Ich möchte gemeinsame Audible-Annotation für mehrere Auditing-Entitäten wie user_audit_entity, business_audit_entity verwenden. – NFE