2017-06-26 12 views
0

デザインごとにいくつかの主要なエンティティタイプによって異なる監査を格納する監査アスペクトを作成したいと思います。私は監査タイプ変数を定義した@Auditingのような注釈を作成しました。それはメソッドレベルでアノテーションされます。アスペクト設計のメインエンティティに監査テーブルを使用するロジックはどこに追加しますか?AOPとスプリングブートを使用した複数の監査テーブル

だけ例:

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


    } 


} 

私は、監査エンティティがどのテーブルのように作成した後、いくつかの条件を追加する計画タイプによって監査ストアに使用するのですか?これはいいですか?

答えて

0

あなたがパフォーマンスを心配している場合、私の知るところでは、Aspectコードはアプリケーションのブートストラップ中に一度だけ自分のコードに組み込まれているので問題はありません。

基本的にこのような方法:

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

はとても限りアスペクトメソッド本体は、あなたが問題を抱えてはならない長い実行時間を持つものではありませんよう

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

    // method logic 
} 

になります。ただし、監査アスペクトもデータベースにアクセスし、Auditedメソッドが頻繁に呼び出される場合、大きなオーバーヘッドが生じる可能性があります。すべての監査更新をコレクションに追加し、定期的にそれらを一括して実行するほうがよいでしょう。

テーブルのアサーションコードをどこに置くべきかについて、私の意見はアスペクトの中にあります。それ以外の場合は、最初にポイントを打つテーブルごとに異なるアスペクトを作成する必要があります。ただし、実際にテーブル名を注釈パラメータとして渡して、アスペクト内でアクセスできるかどうかを確認してください。

何が理想的にしたいと思うことはある:

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

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

申し訳ありませんが、私はしませんパフォーマンスに関するさまざまな質問があります。私はエンティティタイプ別の異なるテーブルに監査を格納しています。だから私はそのコードをどこに置くべきですか? – NFE

+0

データベースへのアクセス方法の例を示してください。 JPA経由ですか? JDBC?春のデータ? – Konstantine

+0

そのJDBC ..(JDBCTemplate)。私は、user_audit_entity、business_audit_entityなどの複数の監査エンティティに共通のAuditableアノテーションを使用したいと思います。 – NFE

関連する問題