Ferina agotal
Marco de agregación de datos de servicio cruzado de Spring Cloud
Resolver el problema
Resuelva el dolor de dividir las propiedades de los datos de paginación después de dividir el servicio de nube de Spring o los atributos de objetos individuales. Admite la inyección automática y la transformación de los atributos de datos estáticos (diccionario de datos) y datos de clave primaria dinámica, entre los cuales los datos estáticos agregados se almacenarán mixtos de primer nivel (GuAVA).
Toma una castaña:
Dos servicios, una tabla en el servicio A utiliza el valor de una tabla en el servicio B. Cuando consultamos la tabla en el servicio A, agregamos los valores de una tabla en el servicio B en el proceso de consulta de servicio A.
Ejemplo
Para un código de ejemplo específico, puede ver el módulo Ace-Merge-Demo.
| -------- Centro de registro de Ace-Eureka | -------- Datos de consultas Ace-Data-Merge-Demo, Ejemplo de agregación aquí | -------- Ace-Data-proveedor de datos
Maven agrega dependencias
<Spendency> <MoupRoD> com.github.wxiaoqi </groupid> <artifactid> ace-merge-core </arfactid> <versión> 2.0-snapshot </versión> </pendency>
Configuración de almacén recomendada
<Sepositories> <Repository> <id> OSS </id> <name> OSS </name> <URL> https://oss.sonatype.org/content/groups/public </ url> </repository> </repository> </repositories>
Anotación de clase de inicio
@EnableAcemerge
Configuración de aplicaciones.
# Datos de servicio transversal Fusionar Fusion: habilitado: verdadero guavacachenummaxsize: 1000 guavacacherefreshwriteTeTime: 10 # min GuavacacherefreshThreadPoolSize: 10 AOP: # Cómo iniciar anotaciones, agregado automáticamente habilitado: Verdadero
Ejemplo de código (los datos del objeto de indicador de @Mergefield deben agregarse)
@Retention (retentionPolicy.Runtime) @Target (valor = {elementType.method, elementType.type, elementtype.field}) public @interface MergeField { / *** valor de consulta* @return* / string key () predeterminado ""; / *** clase de destino* @return*/ class <? extiende objeto> feign () predeterminado objeto.class; / *** Método de llamada* @return*/ string método () default ""; / *** si se debe fusionar los valores de los atributos como valores de consulta* @return*/ boolean isvalueedmerge () predeterminado falso;} Objetos agregados
Usuario de clase pública {nombre de cadena privada; // atributos que requieren agregación @mergefield (key = "test", feign = iservice2.class, método = "writeLog") privado de sexo de cadena; // atributos que requieren agregación @mergefield (feign = iservice2.class, método = "getCitys", isValueEdmerge = true) privado string city; Usuario público (nombre de cadena, sexo de cadena, string city) {this.name = name; this.sex = sexo; this.city = City; } public String getCity () {return City; } public void setCity (String City) {this.city = City; } Usuario público (nombre de cadena) {this.name = name; } Usuario público (nombre de cadena, sexo de cadena) {this.name = name; this.sex = sexo; } public String getName () {nombre de retorno; } public void setName (nombre de cadena) {this.name = name; } public String getsex () {return sex; } public void setsex (sexo de cadena) {this.sex = sex; }} Método de origen de datos agregado (el ejemplo es a través de FeignClient, o puede ser un objeto local de Spring Bean)
Requisitos especiales: el parámetro de entrada debe ser una cadena, y el valor de retorno debe ser map <string, string>. La composición del valor de retorno es la clave y el valor correspondiente del atributo de objeto agregado.
@FeignClient ("Test") Interfaz pública IService2 {@RequestMapping ("CAR/DO") MAP PÚBLICO <String, String> WriteLog (prueba de cadena); @RequestMapping ("Car/City") Mapa público <String, String> GetCitys (IDS de cadena);}Interfaz de servicio remoto correspondiente
/** * @Author Ace * @Create 2017/11/20. */@RestController@requestMapping ("Car") Public Class Service2Rest {private logger logger = loggerFactory.getLogger (servicio2rest.class); @RequestMapping ("do") Mapa público <string, string> writeLog (string test) {logger.info ("El servicio 2 está escribiendo log!"); Map <string, string> map = new HashMap <String, String> (); map.put ("hombre", "hombre"); map.put ("mujer", "mujer"); mapa de retorno; } @RequestMapping ("Ciudad") Mapa público <String, String> GetCity (String IDS) {logger.info ("El servicio 2 está escribiendo log!"+IDS); Map <string, string> map = new HashMap <String, String> (); map.put ("1", "Guangzhou"); map.put ("2", "wuhan"); mapa de retorno; }} Clase biz que agrega objetos (el siguiente método es usar la anotación de escaneo AOP)
@Servicio @slf4jpublic clase userbiz {@aUtowired private MergeCore MergeCore; / ** * Método de agregación de la anotación AOP * El valor de retorno del método de agregación debe ser lista, * Si se trata de un objeto complejo, debe personalizar su propio analizador de agregación (implementando la interfaz imergergeresultparser) */ @mergeresult (result testmgergerSer.classer.class) Lista pública <serve> getAopuser () ArrayList <Serer> (); para (int i = 1000; i> 0; i--) {ussers.add (nuevo usuario ("zhangsan" + i, "hombre", "1")); ussers.add (nuevo usuario ("Lisi" + i, "Mujer", "2")); Users.Add (nuevo usuario ("wangwu" + i, "unkonwn", "2")); } Devuelve usuarios; } / *** Método de agregación manual* @Return* / Public List <Serer> getUser () {ArrayList <Serer> Users = New ArrayList <Serer> (); para (int i = 1000; i> 0; i--) {ussers.add (nuevo usuario ("zhangsan" + i, "hombre", "1")); ussers.add (nuevo usuario ("Lisi" + i, "Mujer", "2")); Users.Add (nuevo usuario ("wangwu" + i, "unkonwn", "2")); } try {// List agregación MergeCore.merggeresult (user.class, usuarios); // agregación de objetos de un solo // MergeCore.mergeone (user.class, users.get (0)); } capt (excepción e) {log.error ("Falló de agregación de datos", e); } Finalmente {return users; }}}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.