Ag-Merge
Структура агрегации данных по перекрестному спектру Spring Cloud
Решить проблему
Решите боль от расщепления свойств подкачивания данных после разделения Spring Cloud Service или атрибутов отдельных объектов. Он поддерживает автоматическую инъекцию и преобразование атрибутов статических данных (словарь данных) и динамические данные первичного ключа, среди которых агрегированные статические данные будут храниться первым смешанным (гуава).
Возьмите каштан:
Две услуги, таблица в обслуживании A использует значение таблицы в обслуживании B. Когда мы запросим таблицу в обслуживании A, мы собираем значения таблицы в обслуживании B в процессе запроса обслуживания A.
Пример
Для конкретного примера код вы можете увидеть модуль Ace-Merge-Demo.
| -------- Айс-эйрека-центр |
Мавен добавляет зависимости
<Depective> <groupid> com.github.wxiaoqi </GroupId> <ArtifactId> Ace-merge-core </artifactid> <sersive> 2.0-snapshot </version> </dependency>
Рекомендуемая конфигурация склада
<pepositories> <perpository> <id> oss </id> <mame> oss </name> <url> https://oss.sonatype.org/content/groups/public </url> </repository> </Repository> </Repositories>
Начать аннотация класса
@EnableAcemerge
Application.yml configuration
# Слияние слияния данных по перекрестному обслуживанию: включено: true guavacachenummaxsize: 1000 guavacacherefreshwritetime: 10 # min guavacacherefreshthreadpoolsize: 10 aop: # Как начать аннотации, автоматически агрегировать
Пример кода (данные объекта флага @mergefield должны быть агрегированы)
@Retention (artencypolicy.runtime) @target (value = {elementtype.method, elementtype.type, elementtype.field}) public @Interface mergefield { / *** Query value* @Return* / String () по умолчанию ""; / *** Целевой класс* @return*/ class <? Extends Object> feign () default object.class; / *** Метод вызова* @return*/ string method () default ""; / *** Собрать ли значения атрибутов как значения запроса* @return*/ boolean isvalueneedmerge () по умолчанию false;} Совокупные объекты
Пользователь открытого класса {Private String name; // атрибуты, которые требуют агрегации @mergefield (key = "test", feign = iService2.class, method = "writelog") частное строковое пол; // атрибуты, которые требуют агрегации @mergefield (feign = iService2.class, method = "getCitys", isvalueneedMerge = true) частный строковый город; Общественный пользователь (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 (строка Sex) {this.sex = sex; }} Агрегатный метод источника данных (пример проходит через FeignClient, или он может быть локальным объектом Spring Bean)
Особые требования: параметр записи должен быть строкой, а возвращающим значением должно быть Map <String, String>. Состав обратного значения является ключом и соответствующим значением атрибута объекта агрегатного объекта.
@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);}Соответствующий интерфейс удаленного обслуживания
/** * @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> worpelog (string test) {logger.info ("Сервис 2 - это журнал написания!"); Map <string, string> map = new hashmap <string, string> (); map.put ("man", "мужчина"); map.put («Женщина», «Женщина»); карта возврата; } @RequestMapping ("city") public map <string, string> getCity (String Ids) {logger.info ("Сервис 2 написал журнал!"+Ids); Map <string, string> map = new hashmap <string, string> (); map.put ("1", "guangzhou"); map.put ("2", "wuhan"); карта возврата; }} Биз класс, который агрегирует объекты (следующим методом является использование аннотации сканирования AOP)
@Service @slf4jpublic class userbiz {@autowired private mergecore mergecore; / ** * Метод агрегации аннотации AOP * Возвращаемое значение метода агрегации должно быть списком, * Если это сложный объект, вам необходимо настроить свой собственный анализатор агрегации (реализация интерфейса imergeresultparser) */ @mergeresult (rescuentparser = testmergeresultparser.class) publicser <user> getaoPuser () restmerSeltAltParser.class) publicSer <) as useRseLISTRAPERTILTPARSERSERSER.class) ArrayList <user> (); for (int i = 1000; i> 0; i--) {users.add (новый пользователь ("Zhangsan" + i, "man", "1")); users.add (новый пользователь ("LISI" + I, "Женщина", "2")); users.add (новый пользователь ("wangwu" + i, "unkonwn", "2")); } вернуть пользователи; } / *** Метод агрегации ручной работы* @return* / public list <user> getUser () {arraylist <user> users = new ArrayList <user> (); for (int i = 1000; i> 0; i--) {users.add (новый пользователь ("Zhangsan" + i, "man", "1")); users.add (новый пользователь ("LISI" + I, "Женщина", "2")); users.add (новый пользователь ("wangwu" + i, "unkonwn", "2")); } try {// Список агрегации mergecore.mergeresult (user.class, users); // Агрегация единого объекта // mergecore.mergeOne (user.class, users.get (0)); } catch (Exception e) {log.error ("Агрегация данных не удалась", E); } наконец {return users; }}}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.