ApiBoot - ApiBoot Resource Load 使用文檔

ApiBoot Resource Load

ApiBoot Resource Load是一款資源與業務徹底分離的基礎框架,能夠整合微服務(Feign、OpenFeign)進行負載均衡讀取固定類型、固定所屬業務的資源信息,遵循必定的資源存儲規則完成自動化資源讀取、添加、更新、刪除、緩存等。java

使用場景

  • 業務圖片存儲
  • 業務音頻、視頻文件存儲
  • 業務文件
  • 其餘資源文件...

引入 ApiBoot Resource Load

pom.xml配置文件內添加以下依賴:git

<!--ApiBoot Resource Load-->
<dependency>
  <groupId>org.minbox.framework</groupId>
  <artifactId>api-boot-starter-resource-load</artifactId>
</dependency>
ApiBoot所提供的依賴都不須要添加版本號,可是須要添加版本依賴,具體查看 ApiBoot版本依賴

瞭解ApiBootResourceStoreDelegate

ApiBootResourceStoreDelegate是一個資源數據讀取的委託驅動接口,在使用ApiBoot Resource Load時,須要實現該接口完成資源的讀取方法loadResourceUrl(),該方法的參數以下所示:github

  1. 第一個參數sourceFieldValue,是查詢資源的業務編號,具體的配置詳見下面的示例。
  2. 第二個參數resourceType,是查詢資源的類型,相同的業務編號下頗有可能存在多種類型,好比:用戶編號對應用戶頭像、用戶封面等。

ApiBootResourceStoreDelegate示例:api

// 示例
@Service
public class ResourceLoadService implements ApiBootResourceStoreDelegate {
    /**
     * logger instance
     */
    static Logger logger = LoggerFactory.getLogger(ResourceLoadService.class);

    @Override
    public List<String> loadResourceUrl(String sourceFieldValue, String resourceType) throws ApiBootException {
        logger.info("查詢資源的業務邏輯字段值:{}", sourceFieldValue);
        logger.info("資源類型:{}", resourceType);
        return Arrays.asList(new String[]{"http://test.oss.com/111.png"});
    }
}
loadResourceUrl方法須要返回根據 resourceFieldValueresourceType字段查詢到的資源列表。

內置註解

  • @ResourceLoad

    標註方法須要進行ApiBoot Resource Load自動化讀取資源信息,該註解必須添加,且只能添加在方法上。緩存

  • @ResourceFields

    @ResourceField註解的集合負載均衡

  • @ResourceField框架

    配置@ResourceLoad標註的方法具體有哪些字段須要進行資源的自動映射,參數解釋以下所示:ide

    • name:查詢資源後設置到類內Field的名稱
    • source:查詢資源所需的業務邏輯編號類內Field的名稱
    • type:資源類型,自行定義
    • isArray:接收查詢後資源的Field類型是否爲array,true:array
    • isList:接收查詢後資源的Field類型是否爲list,true:list

單對象資源加載

資源加載通常都是實體類的方式進行返回的,下面咱們先來建立一個實體類方便示例測試,以下所示:微服務

/**
  * 示例對象
  */
@Data
class SampleUserInfo {
  public SampleUserInfo(String userId, int age) {
    this.userId = userId;
    this.age = age;
  }

  private String userId;
  private String headImage;
  private String shortImage;
  private int age;
}

返回值爲單對象資源加載示例:測試

/**
  * 返回值爲單個對象的示例
  *
  * @return
  */
@ResourceLoad
@ResourceFields({
  @ResourceField(name = "headImage", source = "userId", type = "HEAD_IMAGE"),
  @ResourceField(name = "shortImage", source = "userId", type = "SHORT_IMAGE")
})
public SampleUserInfo singleObjectSample() {
  return new SampleUserInfo("yuqiyu", 24);
}
在上面,咱們配置讀取兩種類型的資源,分別是: HEAD_IMAGESHORT_IMAGE,並且配置的業務資源編號都是 userId字段,這兩個字段也就是會傳遞給 ApiBootResourceStoreDelegate#loadResourceUrl方法做爲參數。

其中HEAD_IMAGE讀取到的資源路徑設置到SampleUserInfo類內的headImageSHORT_IMAGE讀取到的資源路徑設置到SampleUserInfo類內的shortImage字段。

注意:若是你的方法返回對象只有一個資源對象須要映射,能夠單獨配置使用@ResourceField註解。

List集合資源加載

/**
  * 返回值爲list集合的示例
  *
  * @return
  */
@ResourceLoad
@ResourceFields({
  @ResourceField(name = "headImage", source = "userId", type = "HEAD_IMAGE"),
  @ResourceField(name = "shortImage", source = "userId", type = "SHORT_IMAGE")
})
public List<SampleUserInfo> listSample() {
  List<SampleUserInfo> users = new ArrayList();
  users.add(new SampleUserInfo("yuqiyu", 24));
  users.add(new SampleUserInfo("hengboy", 24));
  return users;
}

在上面,會爲返回值list內的每個SampleUserInfo對象進行設置查詢的資源信息。

Map集合資源加載

/**
  * 返回值爲map集合的示例
  *
  * @return
  */
@ResourceLoad
@ResourceFields({
  @ResourceField(name = "headImage", source = "userId", type = "HEAD_IMAGE"),
  @ResourceField(name = "shortImage", source = "userId", type = "SHORT_IMAGE")
})
public Map<String, SampleUserInfo> mapSample() {
  Map<String, SampleUserInfo> users = new HashMap<>(2);
  users.put("yuqiyu", new SampleUserInfo("yuqiyu", 24));
  users.put("hengboy", new SampleUserInfo("hengboy", 24));
  return users;
}

Map類型做爲返回值時,其中注意map -> value必須是對象類型。

若是你有想要的使用方式,你就能夠提交issuse!!!
相關文章
相關標籤/搜索