ApiBoot Resource Load
是一款資源與業務徹底分離的基礎框架,能夠整合微服務(Feign、OpenFeign)
進行負載均衡讀取固定類型、固定所屬業務的資源信息,遵循必定的資源存儲規則
完成自動化
資源讀取、添加、更新、刪除、緩存等。java
在pom.xml
配置文件內添加以下依賴:git
<!--ApiBoot Resource Load-->
<dependency>
<groupId>org.minbox.framework</groupId>
<artifactId>api-boot-starter-resource-load</artifactId>
</dependency>
複製代碼
ApiBoot
所提供的依賴都不須要添加版本號,可是須要添加版本依賴,具體查看ApiBoot版本依賴github
ApiBootResourceStoreDelegate
是一個資源數據讀取的委託驅動接口,在使用ApiBoot Resource Load
時,須要實現該接口完成資源的讀取方法loadResourceUrl()
,該方法的參數以下所示:api
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
自動化讀取資源信息,該註解必須添加,且只能添加在方法上。ide
@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集合的示例 * * @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集合的示例 * * @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!!!