ApiBoot Resource Load
ApiBoot Resource Load
是一款資源與業務完全分離的基礎框架,可以整合微服務(Feign、OpenFeign)
進行負載均衡讀取固定型別、固定所屬業務的資源資訊,遵循一定的資源儲存規則
完成自動化
資源讀取、新增、更新、刪除、快取等。
使用場景
- 業務圖片儲存
- 業務音訊、視訊檔案儲存
- 業務檔案
- 其他資原始檔...
引入 ApiBoot Resource Load
在pom.xml
配置檔案內新增如下依賴:
<!--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()
,該方法的引數如下所示:
- 第一個引數
sourceFieldValue
,是查詢資源的業務編號,具體的配置詳見下面的示例。 - 第二個引數
resourceType
,是查詢資源的型別,相同的業務編號下很有可能存在多種型別,比如:使用者編號對應使用者頭像、使用者封面等。
ApiBootResourceStoreDelegate示例:
// 示例
@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
方法需要返回根據resourceFieldValue
、resourceType
欄位查詢到的資源列表。
內建註解
-
@ResourceLoad
標註方法需要進行
ApiBoot Resource Load
自動化讀取資源資訊,該註解必須新增,且只能新增在方法上。 -
@ResourceFields
@ResourceField
註解的集合 -
@ResourceField
配置
@ResourceLoad
標註的方法具體有哪些欄位需要進行資源的自動對映,引數解釋如下所示:name
:查詢資源後設定到類內Field
的名稱source
:查詢資源所需的業務邏輯編號類內Field
的名稱type
:資源型別,自行定義isArray
:接收查詢後資源的Field
型別是否為array
,true:arrayisList
:接收查詢後資源的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_IMAGE
、SHORT_IMAGE
,而且配置的業務資源編號都是userId
欄位,這兩個欄位也就是會傳遞給ApiBootResourceStoreDelegate#loadResourceUrl
方法作為引數。其中
HEAD_IMAGE
讀取到的資源路徑設定到SampleUserInfo
類內的headImage
,SHORT_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!!!