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版本依賴
ApiBootResourceStoreDelegate
是一個資源數據讀取的委託驅動接口,在使用ApiBoot Resource Load
時,須要實現該接口完成資源的讀取方法loadResourceUrl()
,該方法的參數以下所示:github
sourceFieldValue
,是查詢資源的業務編號,具體的配置詳見下面的示例。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
方法須要返回根據resourceFieldValue
、resourceType
字段查詢到的資源列表。
@ResourceLoad
標註方法須要進行ApiBoot Resource Load
自動化讀取資源信息,該註解必須添加,且只能添加在方法上。緩存
@ResourceFields
@ResourceField
註解的集合負載均衡
@ResourceField
框架
配置@ResourceLoad
標註的方法具體有哪些字段須要進行資源的自動映射,參數解釋以下所示:ide
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!!!