Ag-Merge
스프링 클라우드 크로스 서비스 데이터 집계 프레임 워크
문제를 해결하십시오
스프링 클라우드 서비스 또는 개별 객체의 속성을 분할 후 페이징 데이터의 분할 특성을 분할의 통증을 해결하십시오. 정적 데이터 속성 (데이터 사전) 및 동적 기본 키 데이터의 자동 주입 및 변환을 지원하며, 그 중에 집계 된 정적 데이터는 1 단계 혼합 (GUAVA)이 저장됩니다.
밤나무를 가져 가십시오 :
서비스중인 테이블 A는 서비스 B의 테이블 값을 사용합니다. 서비스 A에서 테이블을 쿼리 할 때 서비스 B의 쿼리 프로세스에서 테이블 값을 집계 할 때 A A.
예
특정 예제 코드의 경우 ACE-Merge-Demo 모듈을 볼 수 있습니다.
| -------- ACE-Eureka 등록 센터 | -------- ACE-DATA-MERGE-DEMO QUERY 데이터, 집계 예제 | ------- ACE-DATA 프로보더 데이터 제공자
Maven은 종속성을 추가합니다
<pectionency> <groupid> com.github.wxiaoqi </groupid> <artifactid> ace-merge-core </artifactid> <bersion> 2.0-snapshot </version> </fectionency>
권장 창고 구성
<repositories> <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 guavacacherefreshththreadpoolsize : 10 AOP : # 주석을 시작하는 방법, 자동으로 집계 활성화 : true.
코드 예제 (@Mergefield 플래그 객체의 데이터를 집계해야합니다)
@retention (rendentionpolicy.runtime) @target (value = {electtype.method, elementtype.type, elementtype.field}) public @interface mergefield { / *** query value* / string key () default ""; / *** 대상 클래스* @return*/ class <? 객체> feign () default object.class를 확장합니다. / *** 호출 메소드* @return*/ string method () default ""; / *** 속성 값을 쿼리 값으로 병합할지 여부* @return*/ boolean isvalueneedmerge () default false;} 집계 물체
공개 클래스 사용자 {개인 문자열 이름; // 집계가 필요한 속성 @Mergefield (key = "test", feign = iservice2.class, method = "writeLog") 개인 문자열 섹스; // 집계가 필요한 속성 @Mergefield (feign = iservice2.class, method = "getCitys", isValueneedMerge = true) 개인 문자열 시티; 공개 사용자 (문자열 이름, 문자열 섹스, 문자열 도시) {this.name = 이름; this.sex = 섹스; this.city = 도시; } public String getCity () {return City; } public void setcity (String City) {this.city = City; } 공개 사용자 (문자열 이름) {this.name = 이름; } 공개 사용자 (문자열 이름, 문자열 섹스) {this.name = 이름; this.sex = 섹스; } public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } public String getSex () {return sex; } public void setsex (String sex) {this.sex = sex; }} 집계 데이터 소스 방법 (예제는 feignclient를 통한 것입니다.
특수 요구 사항 : 항목 매개 변수는 문자열이어야하며 리턴 값은 맵 <String, String>이어야합니다. 리턴 값의 구성은 집계 객체 속성의 키 및 해당 값입니다.
@FeignClient ( "Test") public interface iservice2 {@requestmapping ( "car/do") public map <string, String> writeLog (String Test); @requestmapping ( "Car/City") 공개지도 <String, String> getCitys (String ID);}해당 원격 서비스 인터페이스
/** * @author ace * @create 2017/11/20. */@restcontroller@requestmapping ( "car") public class service2rest {private logger = loggerfactory.getLogger (service2rest.class); @requestmapping ( "do") public map <string, string> writeLog (String Test) {logger.info ( "Service 2는 Log!"); map <string, string> map = new Hashmap <String, String> (); map.put ( "man", "male"); map.put ( "여자", "여성"); 리턴 맵; } @requestmapping ( "city") public map <string, string> getCity (String IDS) {logger.info ( "Service 2는 LOG!"+IDS); map <string, string> map = new Hashmap <String, String> (); map.put ( "1", "광저우"); map.put ( "2", "wuhan"); 리턴 맵; }} 객체를 집계하는 비즈 클래스 (다음 방법은 AOP 스캔 주석을 사용하는 것입니다)
@service @slf4jpublic class userBiz {@autowired private mergecore mergecore; / ** * AOP 주석의 집계 방법 * 집계 방법의 반환 값은 목록이어야합니다. * 복잡한 객체 인 경우 자신의 집계 구문 분석기 (인터페이스 ImereresultParser 구현) */ @mergeresult (resultser = testmergeresultparser.class) public list> getaopuser () {arraylist> ArrayList <user> (); for (int i = 1000; i> 0; i-) {users.add (새 사용자 ( "zhangsan" + i, "man", "1")); user.add (새 사용자 ( "lisi" + i, "woman", "2")); user.add (새 사용자 ( "wangwu" + i, "unkonwn", "2")); } 반환 사용자; } / *** 수동 집계 방법* @return* / public list <user> getUser () {ArrayList <user> user = new ArrayList <user> (); for (int i = 1000; i> 0; i-) {users.add (새 사용자 ( "zhangsan" + i, "man", "1")); user.add (새 사용자 ( "lisi" + i, "woman", "2")); user.add (새 사용자 ( "wangwu" + i, "unkonwn", "2")); } try {// List Aggregation Mergecore.Mergeresult (user.class, users); // 단일 객체 집계 // mergecore.mergeone (user.class, users.get (0)); } catch (예외 e) {log.error ( "데이터 집계 실패", e); } 마침내 {반환 사용자; }}}위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.