ag-merge
Spring Cloud Cross-Service Data Aggregation Framework
問題を解決します
スプリングクラウドサービスまたは個々のオブジェクトの属性を分割した後、ページングデータのプロパティを分割する痛みを解決します。静的データ属性(データ辞書)と動的なプライマリキーデータの自動注入と変換をサポートします。その中で、集計された静的データが第1レベルの混合(GUAVA)が保存されます。
栗を取る:
2つのサービス、サービスのテーブルAは、サービスBのテーブルの値を使用します。サービスAのテーブルを照会すると、サービスプロセスAのサービスBのテーブルBの値を集約します。
例
特定の例コードでは、ACE-Merge-Demoモジュールを見ることができます。
| -------- Ace-eureka登録センター| -------- Ace-Data-Merge-Demoクエリデータ、集約の例
Mavenは依存関係を追加します
<Dependency> groupId> com.github.wxiaoqi </groupid> <artifactid> ace-merge-core </artifactid> <バージョン> 2.0-snapshot </version> </dependency>
推奨される倉庫構成
<リポジトリ> <Repository> <id> oss </id> <name> oss </name> <url> https://oss.sonatype.org/content/groups/public </url> </repository> </repository> </repositories>
クラスの注釈を開始します
@enableacemerge
Application.yml構成
#クロスサービスデータマージマージ:有効:真のguavacachenummaxsize:1000 guavacacherefreshwritetime:10#min guavacacherefreshthreadpoolsize:10 aop:#アノテーションを開始する方法、自動的に集約されます:true:true
コードの例(@mergefieldフラグオブジェクトのデータを集約する必要があります)
@retention(retentionPolicy.runtime)@target(value = {elementType.Method、elementType.type、elementType.field})public @interface mergefield { / *** query value* @return* / string key()default ""; / ***ターゲットクラス* @return*/ class <? object> feign()default object.class; / *** call method* @return*/ string method()default ""; / ***属性値をクエリ値としてマージするかどうか* @return*/ boolean isvalueneedmerge()default false;}集約オブジェクト
パブリッククラスユーザー{プライベート文字列名; // aggregation @mergefieldを必要とする属性(key = "test"、feign = iservice2.class、method = "writelog")private string sex; // aggregation @mergefieldを必要とする属性(feign = iservice2.class、method = "getCitys"、isvalueneedmerge = true)private string city;パブリックユーザー(文字列名、文字列セックス、ストリングシティ){this.name = name; this.sex = sex; this.city = city; } public string getCity(){return City; } public void setCity(String City){this.city = city; } public user(string name){this.name = name; } public user(string name、string sex){this.name = name; this.sex = sex; } public string getname(){return name; } public void setName(string name){this.name = name; } public string getSex(){return sex; } public void setSex(string sex){this.sex = sex; }}集約データソースメソッド(例はfeignclientを使用するか、ローカルスプリングビーンオブジェクトになる可能性があります)
特別な要件:エントリパラメーターは文字列である必要があり、返品値はMap <String、String>でなければなりません。リターン値の構成は、集約オブジェクト属性のキーと対応する値です。
@feignclient( "test")public interface iservice2 {@requestmapping( "car/do")public map <string、string> writelog(string test); @RequestMapping( "Car/City")パブリックマップ<String、String> GetCitys(String IDS);}対応するリモートサービスインターフェイス
/** * @author ace * @create 2017/11/20。 */@RESTCONTROLLER@requestMapping( "car")public class service2rest {private logger logger = loggerFactory.getLogger(service2rest.class); @RequestMapping( "do")public map <string、string> writelog(string test){logger.info( "service 2 is write log!"); map <string、string> map = new hashmap <string、string>(); map.put( "man"、 "male"); map.put( "woman"、 "fame");マップを返します。 } @RequestMapping( "city")public map <string、string> getCity(string ids){logger.info( "Service 2 is write log!"+ids); map <string、string> map = new hashmap <string、string>(); map.put( "1"、 "guangzhou"); map.put( "2"、 "wuhan");マップを返します。 }}オブジェクトを集約するbizクラス(次の方法は、AOPスキャン注釈を使用することです)
@service @slf4jpublic class userbiz {@autowired private mergecore mergecore; / *** * AOPアノテーションの集約方法 *集約方法の返品値はリストでなければなりません *複雑なオブジェクトの場合、インターフェイスImergeresultParserの実装) */ @Mergeresult(resultParser = testmergeresultparser.class)公開<ユーザー<ユーザー> getaopuser( arrayList <user>(); for(int i = 1000; i> 0; i--){users.add(new user( "zhangsan" + i、 "man"、 "1")); users.add(new user( "lisi" + i、 "woman"、 "2")); users.add(new user( "wangwu" + i、 "unkonwn"、 "2")); }ユーザーを返します。 } / ***手動集約方法* @return* / public list <user> getUser(){arraylist <user> users = new arraylist <user>(); for(int i = 1000; i> 0; i--){users.add(new user( "zhangsan" + i、 "man"、 "1")); users.add(new user( "lisi" + i、 "woman"、 "2")); users.add(new user( "wangwu" + i、 "unkonwn"、 "2")); } try {// aggregation mergecore.mergeresult(user.class、users); //単一オブジェクト集約// mergecore.mergeone(user.class、users.get(0)); } catch(例外e){log.error( "データ集約が失敗した"、e); }最後に{ユーザーを返します。 }}}上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。