最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年03月05日 11:03:57   作者:老A / AG-Merge  
這篇文章主要介紹了詳解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 模塊

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

Maven添加依賴

<dependency>
  <groupId>com.github.wxiaoqi</groupId>
  <artifactId>ace-merge-core</artifactId>
  <version>2.0-SNAPSHOT</version>
</dependency>

推薦倉庫配置

<repositories>
    <repository>
      <id>oss</id>
      <name>oss</name>
      <url>https://oss.sonatype.org/content/groups/public</url>
    </repository>
  </repositories>

啟動類加注解

@EnableAceMerge

application.yml配置

# 跨服務(wù)數(shù)據(jù)合并
merge:
 enabled: true
 guavaCacheNumMaxSize: 1000
 guavaCacheRefreshWriteTime: 10 # min
 guavaCacheRefreshThreadPoolSize: 10
 aop: # 啟動注解的方式,自動聚合
  enabled: true

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

@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;
}

聚合對象

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.

@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ù)接口

/**
 * @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掃描注解的方式)

@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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • jmeter中json提取器如何提取多個參數(shù)值

    jmeter中json提取器如何提取多個參數(shù)值

    關(guān)于jmeter中的正則表達(dá)式及json提取器可以提取響應(yīng)值,但是實際可以需要上個接口的多個響應(yīng)值,本文就詳細(xì)的介紹一下如何使用,感興趣的可以了解一下
    2021-11-11
  • Spring Bean基本管理實例詳解

    Spring Bean基本管理實例詳解

    這篇文章主要介紹了Spring Bean基本管理,以實例形式較為詳細(xì)的分析了Spring Bean的相關(guān)使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • AndroidHttpClient使用Cookie應(yīng)用分析

    AndroidHttpClient使用Cookie應(yīng)用分析

    今天想把一個用使用了HttpClient的自動簽到小程序移植到Android上,還好Android的SDK自帶了HttpClient的包.當(dāng)然也可以繼續(xù)使用DefaultHttpClient,但用為Android定制的AndroidHttpClient自然更好
    2012-11-11
  • mybatis插件優(yōu)雅實現(xiàn)字段加密的示例代碼

    mybatis插件優(yōu)雅實現(xiàn)字段加密的示例代碼

    在很多時候,我們都需要字段加密,比如郵箱,密碼,電話號碼等,本文主要介紹了mybatis插件優(yōu)雅實現(xiàn)字段加密的示例代碼,感興趣的可以了解一下
    2023-11-11
  • Springboot詳解線程池與多線程及阻塞隊列的應(yīng)用詳解

    Springboot詳解線程池與多線程及阻塞隊列的應(yīng)用詳解

    本例應(yīng)用線程池、多線程、阻塞隊列處理一個流程任務(wù)。本例處理一個訂單流程,主要包括生成訂單、訂單處理、訂單入庫,下面我們一起看看
    2022-06-06
  • java集合Collection實現(xiàn)類解析ArrayList?LinkedList及Vector

    java集合Collection實現(xiàn)類解析ArrayList?LinkedList及Vector

    這篇文章主要為大家介紹了java集合Collection實現(xiàn)類解析ArrayList?LinkedList及Vector,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-03-03
  • Java類的初始化順序知識點總結(jié)

    Java類的初始化順序知識點總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于Java類的初始化順序知識點總結(jié),需要的朋友們可以學(xué)習(xí)下。
    2020-02-02
  • Java中JUC包(java.util.concurrent)下的常用子類

    Java中JUC包(java.util.concurrent)下的常用子類

    相信大家已經(jīng)對并發(fā)機(jī)制中出現(xiàn)的很多的常見知識點進(jìn)行了總結(jié),下面這篇文章主要給大家介紹了關(guān)于Java中JUC包(java.util.concurrent)下的常用子類的相關(guān)資料,文中通過圖文以及示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • Mybatis使用JSONObject接收數(shù)據(jù)庫查詢的方法

    Mybatis使用JSONObject接收數(shù)據(jù)庫查詢的方法

    這篇文章主要介紹了Mybatis使用JSONObject接收數(shù)據(jù)庫查詢,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • Java去除字符串中空格的方法詳解

    Java去除字符串中空格的方法詳解

    這篇文章主要介紹了Java去除字符串中空格的方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08

最新評論

会宁县| 崇义县| 方正县| 凭祥市| 奉贤区| 延吉市| 威海市| 修武县| 常州市| 介休市| 马龙县| 东安县| 漳州市| 沧源| 海安县| 石林| 禄丰县| 招远市| 体育| 武宣县| 富锦市| 东乡族自治县| 乃东县| 洛宁县| 三明市| 宁晋县| 怀柔区| 民县| 沂水县| 长兴县| 永仁县| 台安县| 瓮安县| 阿城市| 长春市| 新蔡县| 蒙山县| 依兰县| 丽水市| 池州市| 揭西县|