AG-MERGE
Estrutura de agregação de dados de serviço transversal da nuvem de primavera
Resolva o problema
Resolva a dor das propriedades divididas dos dados de paginação após dividir o serviço de nuvem da primavera ou os atributos de objetos individuais. Ele suporta injeção automática e transformação de atributos de dados estáticos (dicionário de dados) e dados principais dinâmicos, entre os quais os dados estáticos agregados serão armazenados misturados de primeiro nível (goiaba).
Pegue uma castanha:
Dois serviços, uma tabela no serviço A usa o valor de uma tabela no serviço B. Quando consultar a tabela no serviço A, agregamos os valores de uma tabela no Serviço B no processo de consulta de serviço A.
Exemplo
Para um código de exemplo específico, você pode ver o módulo ACE-Merge-Demo.
| -------- Ace-Eureka Centro de Registro | -------- Ace-Data-Merge-Demo Dados de consulta, exemplo de agregação aqui | -------- Ace-Data-Provider Provedor de dados
Maven adiciona dependências
<Depencency> <PuerpId> com.github.wxiaoqi </frugiD> <ArtifactId> ACE-Merge-core </stifactId> <versão> 2.0-snapshot </sipers> </pendencency>
Configuração recomendada do armazém
<Repositórios> <Ppository> <d> oss </d> <name> oss </name> <url> https://oss.sonatype.org/content/groups/public </url> </positório> </positório> </positórios>
Iniciar anotação da aula
@EnableaCemerge
Application.yml Configuração
# Dados de serviço transversal Mesclagem Mesclar: Ativado: True GuavacachenummaxSize: 1000 GuavacacherefreshWriteTime: 10 # min Min GuavacacherefreshThreadPoolSize: 10 AOP: # Como iniciar anotações, agregar automaticamente ativado: true
Exemplo de código (os dados do objeto @Mergefield Flag do objeto precisam ser agregados)
@Retention (retentionPolicy.Runtime) @target (value = {elementType.method, elementType.type, elementType.field}) public @Interface Mergefield { / *** Valor de consulta* @return* / string key () default ""; / *** classe de destino* @return*/ classe <? estende objeto> Feign () Object.class; / *** Método de chamada* @return*/ string method () padrão ""; / *** Se deve mesclar valores de atributo como valores de consulta* @return*/ boolean isvalueneedmerge () padrão false;} Objetos agregados
Public class Usuário {Nome da String Private; // atributos que requerem agregação @mergefield (key = "test", Feign = iservice2.class, method = "writeLog") sexo de cordas privadas; // atributos que requerem agregação @mergefield (Feign = iservice2.class, method = "getCitys", isvalueneedmerge = true) private string city; usuário público (nome da string, sexo de string, string city) {this.name = name; this.sex = sexo; this.city = city; } public string getCity () {return City; } public void setCity (string city) {this.city = city; } usuário público (nome da string) {this.name = name; } usuário público (nome da string, sexo de string) {this.name = name; this.sex = sexo; } public string getName () {return name; } public void setName (nome da string) {this.name = name; } public string getSex () {return Sex; } public void SetSex (sexo de string) {this.sex = sexo; }} O método agregado da fonte de dados (o exemplo é através do FeignClient, ou pode ser um objeto de feijão local)
Requisitos especiais: o parâmetro de entrada deve ser uma string e o valor de retorno deve ser mapa <string, string>. A composição do valor de retorno é a chave e o valor correspondente do atributo de objeto agregado.
@FeignClient ("Test") interface pública iservice2 {@RequestMapping ("car/do") mapa público <string, string> writeLog (teste de string); @RequestMapping ("Car/cidade") Mapa público <String, String> getCitys (string IDS);}Interface de serviço remoto correspondente
/** * @Author Ace * @create 2017/11/20. */@RestController@requestmapping ("car") classe pública Service2Rest {private Logger Logger = LoggerFactory.getLogger (Service2Rest.class); @RequestMapping ("DO") Public Map <String, String> WriteLog (String test) {Logger.info ("Serviço 2 está escrevendo log!"); Mapa <string, string> map = new hashmap <string, string> (); map.put ("homem", "masculino"); map.put ("mulher", "feminino"); mapa de retorno; } @RequestMapping ("City") Public Map <String, String> getCity (string IDS) {Logger.info ("Serviço 2 está escrevendo log!"+IDs); Mapa <string, string> map = new hashmap <string, string> (); map.put ("1", "Guangzhou"); map.put ("2", "Wuhan"); mapa de retorno; }} Classe de negócios que agrega objetos (o método a seguir é usar a anotação de varredura AOP)
@Service @slf4jpublic classe userbiz {@AUTOWIRED MEMGECORE MEMGECORE PRIVADO; / ** * Método de agregação da anotação AOP * O valor de retorno do método de agregação deve estar listado, * Se for um objeto complexo, você precisa personalizar seu próprio analisador de agregação (implementando a interface iMergeResultParSer) */ @MergeResult (ResultParser = TestMererererSultParSer.class) ArrayList <suser> (); for (int i = 1000; i> 0; i--) {users.add (novo usuário ("zhangsan" + i, "man", "1")); users.add (novo usuário ("lisi" + i, "mulher", "2")); users.add (novo usuário ("wangwu" + i, "unkonwn", "2")); } retornar usuários; } / *** Método de agregação manual* @return* / list public <suser> getUser () {ArrayList <suser> usuários = new ArrayList <suser> (); for (int i = 1000; i> 0; i--) {users.add (novo usuário ("zhangsan" + i, "man", "1")); users.add (novo usuário ("lisi" + i, "mulher", "2")); users.add (novo usuário ("wangwu" + i, "unkonwn", "2")); } tente {// listar agregação Mergecore.mergeResult (user.class, usuários); // agregação de objeto único // Mergecore.mergeone (user.class, usuários.get (0)); } catch (Exceção e) {Log.error ("Falha na agregação de dados", e); } finalmente {retorna usuários; }}}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.