要約:この記事では、シーンが派遣センターと監視センター、バックエンドTDDLは、サブメーターと倉庫を、達成するときに実行する必要がある需要:バックアップにメインライブラリーから切り替える必要がMyBatisのクエリのデータを使用している場合、クエリモニタ重要な事業を実施直接ライブラリー、またはスタンバイデータベースクエリに接続され、これ春ブーツは、この記事でAOPを直接接続スタンバイ・データベースのクエリを結合一次記録カスタム注釈では、メインバンクの圧力を低下させます。
バックアップリポジトリに切り替えることにより達成A. AOPマスターライブラリのカスタム注釈
1.1カスタム注釈
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
パブリック@interface SwitchDataBase {
ブールswitch2Backup()は偽デフォルト。
}
1.2実装のカスタムインターセプタ注釈プロセス
のインポートjava.lang.reflect.Methodオブジェクト、
インポートjava.util.Arrays。
輸入org.aopalliance.intercept.MethodInterceptor。
輸入org.aopalliance.intercept.MethodInvocation。
輸入org.slf4j.Logger。
輸入org.slf4j.LoggerFactory;
輸入org.springframework.stereotype.Component。
/ **
*スタンバイ・データベースの処理ロジックノートを行く
* /
@Component
パブリッククラスSwitchDataBaseInterceptor実装{MethodInterceptorの
民間最終ロガーログ= LoggerFactory.getLogger(SwitchDataBaseInterceptor.class)。
@Override
パブリックオブジェクトを呼び出し(MethodInvocation呼び出し)がThrowableを{スロー
メソッドのメソッドを= invocation.getMethod()。
SwitchDataBase注釈= getAnnotation(方法)
IF(注釈== NULL){
戻りinvocation.proceed()。
}
ヴァル= NULLオブジェクト。
(もし!ThreadLocalMap.containsKey(GroupDataSourceRouteHelper.DATASOURCE_INDEX)){
場合(annotation.switch2Backup()){
log.info( "クエリバックDBアップ、方法:" + method.getName());
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(1、TRUE)。
}他{
log.info( "クエリプライマリDB、方法:" + method.getName())。
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(0、TRUE)。
}
}
{試みる
ヴァル= invocation.proceed()。
}キャッチ(例外e){
log.info(method.getDeclaringClass()のgetName()+ +。 ""
invocation.getMethod()のgetName()+ "方法调用失败、引数:" +
Arrays.toString(呼び出し。 getArguments()))。
新しいのRuntimeException(e)を投げます。
}最後に{
GroupDataSourceRouteHelper.removeGroupDataSourceIndex()。
}
ヴァルを返します。
}
/ **
見つけるための方法の上方に宣言*注意
* /
プライベートSwitchDataBase getAnnotation(メソッド、メソッド){
IF(method.isAnnotationPresent(SwitchDataBase.class)){
; method.getAnnotation(SwitchDataBase.class)を返す
}
戻りヌル;
}
}
1.3設定OverallQueryConfiguration
AOPビーンに装着春ブーツ、特定のディレクトリのスキャンでの実装の注意事項は、通知プロセスを達成するために、カットに形成されています。以下のサンプルコードは
、インポートcom.wdk.wms.annotation.SwitchDataBaseInterceptor
インポートorg.springframework.aop.Advisor;
インポートorg.springframework.aop.support.DefaultPointcutAdvisor;
インポートorg.springframework.aop.support.JdkRegexpMethodPointcut;
インポートorg.springframework。 context.annotation.Bean;
インポートorg.springframework.context.annotation.Configuration。
@Configuration
パブリッククラスSwitchDataBaseConfiguration {
@Bean(名= "overallQueryInterceptor")
公衆SwitchDataBaseInterceptor overallQueryInterceptor(){
)(新しいSwitchDataBaseInterceptorを返します。
}
//添加AOP的ポイントカット
@Bean(名前= "jdkRegexpMethodPointcut")
公共JdkRegexpMethodPointcut jdkRegexpMethodPointcut(){
JdkRegexpMethodPointcut jdkRegexpMethodPointcut =新しいJdkRegexpMethodPointcut();
jdkRegexpMethodPointcut.setPatterns( "com.wdk.wms.mapper *。");
jdkRegexpMethodPointcutを返します。
}
AOPは、対応するデフォルト構成を設定//オリジナル<AOP:アドバイザ>
@Bean
公共druidAdvisorアドバイザ(){
DefaultPointcutAdvisor DefaultPointcutAdvisor新しい新しいDefaultPointcutAdvisor =();
defaultPointcutAdvisor.setPointcut(JdkRegexpMethodPointcut());
defaultPointcutAdvisor.setAdvice(overallQueryInterceptor()) ;
; DefaultPointcutAdvisorを返します
}
}
1.4どのようにスタンバイプールに一次ライブラリー・スイッチからのアノテーションを使用する
(trueに= switch2Backup)@SwitchDataBase
一覧<ConsumerNoticeMsg> listByTemplateOver3(@Param(「テンプレート」)一覧<整数>テンプレート)。