国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - 詳解Spring Cloud 跨服務(wù)數(shù)據(jù)聚合框架

詳解Spring Cloud 跨服務(wù)數(shù)據(jù)聚合框架

2021-04-09 11:33老A / AG-Merge Java教程

這篇文章主要介紹了詳解Spring Cloud 跨服務(wù)數(shù)據(jù)聚合框架,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

AG-Merge

Spring Cloud 跨服務(wù)數(shù)據(jù)聚合框架

解決問題

解決Spring Cloud服務(wù)拆分后分頁數(shù)據(jù)的屬性或單個對象的屬性拆分之痛, 支持對靜態(tài)數(shù)據(jù)屬性(數(shù)據(jù)字典)、動態(tài)主鍵數(shù)據(jù)進(jìn)行自動注入和轉(zhuǎn)化, 其中聚合的靜態(tài)數(shù)據(jù)會進(jìn)行 一級混存 (guava).

舉個栗子:

兩個服務(wù),A服務(wù)的某張表用到了B服務(wù)的某張表的值,我們在對A服務(wù)那張表查詢的時候,把B服務(wù)某張表的值聚合在A服務(wù)的那次查詢過程中

示例

具體示例代碼可以看 ace-merge-demo 模塊

?
1
2
3
|------- ace-eureka 注冊中心
|------- ace-data-merge-demo 查詢數(shù)據(jù),此處聚合示例
|------- ace-data-provider 數(shù)據(jù)提供者

Maven添加依賴

?
1
2
3
4
5
<dependency>
  <groupId>com.github.wxiaoqi</groupId>
  <artifactId>ace-merge-core</artifactId>
  <version>2.0-SNAPSHOT</version>
</dependency>

推薦倉庫配置

?
1
2
3
4
5
6
7
<repositories>
    <repository>
      <id>oss</id>
      <name>oss</name>
      <url>https://oss.sonatype.org/content/groups/public</url>
    </repository>
  </repositories>

啟動類加注解

?
1
@EnableAceMerge

application.yml配置

?
1
2
3
4
5
6
7
8
# 跨服務(wù)數(shù)據(jù)合并
merge:
 enabled: true
 guavaCacheNumMaxSize: 1000
 guavaCacheRefreshWriteTime: 10 # min
 guavaCacheRefreshThreadPoolSize: 10
 aop: # 啟動注解的方式,自動聚合
  enabled: true

代碼示例( @MergeField 標(biāo)志對象的數(shù)據(jù)需要聚合)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@Retention(RetentionPolicy.RUNTIME)
@Target(value={ElementType.METHOD,ElementType.TYPE,ElementType.FIELD})
public @interface MergeField {
  /**
   * 查詢值
   * @return
   */
  String key() default "";
 
  /**
   * 目標(biāo)類
   * @return
   */
  Class<? extends Object> feign() default Object.class;
 
  /**
   * 調(diào)用方法
   * @return
   */
  String method() default "";
 
  /**
   * 是否以屬性值合并作為查詢值
   * @return
   */
  boolean isValueNeedMerge() default false;
}

聚合對象

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public class User {
  private String name;
  // 需要聚合的屬性
  @MergeField(key="test", feign = IService2.class,method = "writeLog")
  private String sex;
  // 需要聚合的屬性
  @MergeField(feign = IService2.class,method = "getCitys",isValueNeedMerge = true)
  private String city;
 
  public User(String name, String sex, 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;
  }
}

聚合數(shù)據(jù)來源方法(示例為通過FeignClient,也可以是本地的spring bean對象)

特別要求:入?yún)⒈仨殲橐粋€String,返回值必須為Map<String,String>. 其中返回值的構(gòu)成,就是聚合對象屬性的key和對應(yīng)的value.

?
1
2
3
4
5
6
7
8
@FeignClient("test")
public interface IService2 {
  @RequestMapping("car/do")
  public Map<String, String> writeLog(String test);
 
  @RequestMapping("car/city")
  public Map<String, String> getCitys(String ids);
}

對應(yīng)的遠(yuǎn)程服務(wù)接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
 * @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 writing log!");
    Map<String,String> map = new HashMap<String, String>();
    map.put("man","男");
    map.put("woman","女");
    return map;
  }
 
  @RequestMapping("city")
  public Map<String,String> getCity(String ids){
    logger.info("service 2 is writing log!"+ids);
    Map<String,String> map = new HashMap<String, String>();
    map.put("1","廣州");
    map.put("2","武漢");
    return map;
  }
}

聚合對象的Biz類(下面的方式是采用aop掃描注解的方式)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
@Service
@Slf4j
public class UserBiz {
  @Autowired
  private MergeCore mergeCore;
  /**
   *   aop注解的聚合方式
   *   其中聚合的方法返回值必須為list,
   *   如果為復(fù)雜對象,則需要自定義自己的聚合解析器(實現(xiàn)接口IMergeResultParser)
   */
  @MergeResult(resultParser = TestMergeResultParser.class)
  public List<User> getAopUser() {
    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"));
    }
    return users;
  }
 
  /**
   * 手動聚合方式
   * @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 {
      // list 聚合
      mergeCore.mergeResult(User.class,users);
      // 單個對象聚合
//      mergeCore.mergeOne(User.class,users.get(0));
    } catch (Exception e) {
      log.error("數(shù)據(jù)聚合失敗",e);
    }finally {
      return users;
    }
  }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://gitee.com/geek_qi/AG-Merge

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲综合社区 | 91久久国产精品 | 性大毛片视频 | 国产精品久久久久久久久久99 | 日韩在线观看中文字幕 | 亚洲影视一区 | 国产精品一区二区三区免费 | 九九精品视频在线观看 | 免费视频爱爱太爽了 | 成人在线一区二区 | 亚洲欧洲精品成人久久奇米网 | 成人久久久久久久 | 日本不卡免费新一二三区 | 国产麻豆乱码精品一区二区三区 | 国产精品视频一 | 欧美精品成人一区二区在线 | 国产电影一区二区三区 | 在线观看av网站永久 | 国产精品777 | 丁香五月亚洲综合在线 | 免费国产wwwwwww网站 | 久久综合导航 | 性色国产 | 在线一区视频 | 欧美一级二级视频 | 欧美视频在线看 | 激情片网站 | 欧美日韩国产在线观看 | 免费一区二区 | a欧美| 精品亚洲一区二区三区四区五区 | 免费人成黄页网站在线一区二区 | 一级黄片毛片 | 日本成人高清视频 | 黄色天堂| 欧美一级视频在线观看 | 欧美日韩电影一区 | 黄片毛片在线 | 日韩精品免费一区二区三区 | 黄色片地址 | 欧美午夜一区二区 |