Detalles de la actualización de la versión 2.7.0:
- corrección: una vez iniciada la tarea de reparación, actualice el tiempo de activación de la tarea, no tendrá efecto.
- corrección: la estrategia de persistencia de redis no afecta la configuración global
- corrección: corrige el error de que el módulo uid puede informar un error al iniciar
- feat: Combine ContextHandlerInterceptor, TenantContextHandlerInterceptor y MdcHandlerInterceptor en HeaderThreadLocalInterceptor, que se usa específicamente para procesar los parámetros en el encabezado de la solicitud y encapsularlo en ThreadLocal
- hazaña: TokenContextFilter admite una configuración separada para ignorar el inquilino y el token
- feat: Cambie el nombre de IgnoreTokenProperties a IgnoreProperties y cambie la configuración original ʻignore.token.url` a `zuihou.ignore.xxx`
- hazaña: descartar pruebas unitarias inútiles
- hazaña: Reemplazar StringUtils de apache con StrUtil de hutool
- hazaña: las funciones relacionadas con xss-starter admiten la configuración a través de archivos de configuración
- hazaña: la anotación SysLog admite la obtención de parámetros en el contexto del hilo actual. Uso # threadLocal.name
- hazaña: estructura de código de inyección de datos, optimización de comentarios
- hazaña: la inyección de datos admite ignorar la inyección de campos especificados
- hazaña: se mejoraron algunos comentarios de código, se optimizó alguna lógica de código y se corrigieron algunos errores
Introducción:
Andamio de microservicio basado en `SpringCloud (Hoxton.SR7)` + `SpringBoot (2.2.9.RELEASE)`, con la capacidad de deshabilitar y cambiar libremente los métodos de implementación de inquilinos. Con administración de usuarios, administración de autoridad de recursos, autenticación de puerta de enlace unificada, Xss Múltiples módulos, como prevención de ataques entre sitios, generación automática de código, múltiples sistemas de almacenamiento, transacciones distribuidas, tareas de tiempo distribuido, etc., respaldan el desarrollo paralelo de múltiples sistemas comerciales, respaldan el desarrollo paralelo de múltiples servicios y se pueden utilizar como un andamio de desarrollo para servicios back-end. El código es simple y la estructura es clara, lo que es muy adecuado para aprender y usar. La tecnología central adopta Nacos, Fegin, Ribbon, Zuul, Hystrix, JWT Token, Mybatis, SpringBoot, Seata, Sentinel, RabbitMQ, FastDFS y otros marcos y middleware principales.
Espero trabajar duro para crear un conjunto de soluciones desde el marco básico de SaaS - arquitectura de microservicio - implementación automatizada - monitoreo del sistema . Este proyecto tiene como objetivo lograr capacidades básicas y no involucra empresas específicas.
Este proyecto tiene como objetivo realizar la función de generación de código, la función básica, la función común y la función general del sistema a través de la especificación de diseño de la estructura de la tabla de convenciones, la especificación de escritura de código y la especificación de división del módulo.
Diagrama de arquitectura:
Modelo de inquilino:
Modelo de inquilino | descripción | ventaja | Desventaja | Transacción distribuida |
NINGUNO (modo no inquilino) | Sin inquilinos | Simple y adecuado para sistemas independientes | Falta de conveniencia del sistema de inquilinos | colocarse |
COLUMNA (modo de campo) | Los inquilinos comparten una base de datos y agregan campos a la tabla de negocios para distinguir | Desarrollo simple, sin complicaciones, sin percepción | Aislamiento de datos deficiente, seguridad deficiente, copia de seguridad y recuperación de datos difíciles | colocarse |
SCHEMA (esquema independiente) | Cada inquilino tiene una base de datos independiente (esquema). Al ejecutar sql, agregue dinámicamente el esquema antes del nombre de la tabla | Simple, sin percepción de desarrollo, buen aislamiento de datos | La cuenta raíz de la base de datos debe configurarse en el archivo de configuración, y no se admiten funciones personalizadas anidadas de SQL complejas y SQL | colocarse |
DATASOURCE (fuente de datos independiente) | Cada inquilino tiene una base de datos independiente (fuente de datos) y la fuente de datos se cambia dinámicamente cuando se ejecuta el código | La base de datos se puede implementar de forma independiente, con buen aislamiento de datos, alta escalabilidad y bajo impacto de fallas. | Relativamente complejo, el desarrollo debe prestar atención a los problemas de las transacciones al cambiar las fuentes de datos y requiere más bases de datos | colocarse |
caracteristicas:
- Gestión de inquilinos: el fondo de operaciones (zuihou-admin-ui) gestiona toda la creación de inquilinos
- Centro de usuario: organización, puesto, mantenimiento de datos de usuario, restablecimiento de contraseña de usuario, etc.
- Gestión de autoridad: menú, configuración de recursos, gestión de roles, vincular usuarios a roles, autorizar menús y recursos a roles
- Configuración básica: mantenimiento de diccionario, región, parámetros del sistema y otra información
- Gestión de desarrolladores: gestión de aplicaciones, monitorización de bases de datos, registros de operaciones, registros de inicio de sesión, documentos de interfaz swagger, centros de registro, varios controles
- Centro de mensajes: envíe y vea mensajes en este sitio
- Centro de SMS: configuración básica de SMS de los principales operadores. Después de la configuración, el sistema tiene la capacidad de enviar SMS
- Centro de archivos: proporciona capacidades de almacenamiento y carga de archivos adjuntos del sistema, soporte integrado para almacenamiento local, almacenamiento FastDFS, almacenamiento en la nube de Alibaba y solo cambio a través de la configuración
- Gestión de la puerta de enlace: capacidad de límite actual, capacidad de bloqueo de acceso (es decir, lista hei)
- Gestión de procesos: funciones comunes del flujo de trabajo (gestión de modelos, implementación de procesos, etc.)
Introducción al punto técnico:
Autenticación del servicio:
JWT se utiliza para fortalecer la verificación de autorización de la programación entre servicios para garantizar la seguridad de los servicios internos.
monitor:
Use Spring Boot Admin para monitorear el estado de ejecución de cada servicio independiente; use la turbina para ver el estado de ejecución y la frecuencia de llamada de la interfaz en tiempo real; use Zipkin para ver la cadena de llamadas entre cada servicio.
permiso de datos:
Los permisos de datos simples se implementan utilizando el interceptor DataScopeInterceptor basado en Mybatis
Solución sin sentido de SaaS:
Utilice el interceptor Mybatis para lograr la interceptación de todo SQL, el modo COLUMN empalma dinámicamente los códigos de inquilinos, el modo SCHEMA modifica el esquema predeterminado y el modo DATASOURCE cambia dinámicamente las fuentes de datos para lograr el propósito de aislamiento de datos de múltiples inquilinos. Y es compatible con el modo de inquilino discapacitado.
Caché secundario:
J2Cache se usa para operar el caché, el caché de primer nivel usa memoria (cafeína) y el caché de segundo nivel usa Redis. Dado que una gran cantidad de lecturas de caché hará que la red L2 se convierta en el cuello de botella de todo el sistema, el objetivo de L1 es reducir la cantidad de lecturas a L2. El marco de almacenamiento en caché se utiliza principalmente en un entorno de clúster. También se puede usar en una computadora independiente para evitar el impacto en el negocio de back-end después del reinicio en frío de la caché causado por el reinicio de la aplicación.
Conversión de frijol elegante:
Utilice componentes de Dozer para optimizar la conversión de DTO, DO, PO y otros objetos
Validación unificada de formularios de front-end y back-end:
La validación de formularios rigurosa generalmente requiere verificación tanto de front-end como de back-end. Sin embargo, los proyectos tradicionales solo se pueden probar una vez para cada front y back. Después de que cambia la regla, los front-end y back-end deben modificarse al mismo tiempo. Por lo tanto, sobre la base de hibernate-validator, se encapsula la dependencia inicial de Zuihou-validator-starter y se proporciona una interfaz común para obtener las reglas que necesitan para verificar el formulario, y luego el front-end usa las reglas devueltas por el back-end. Si las reglas cambian en el futuro, solo se requiere el back-end Simplemente modifíquelo.
Scripting anti-cross-site (XSS):
- Filtrar los parámetros del formulario en todas las solicitudes a través de filtros
- Filtrar todos los parámetros de tipo application / json a través del deserializador Json
Inyector de información de usuario actual:
Inyección de identidad de usuario a través de anotaciones
API en línea:
Debido a que algunas funciones del swagger-ui nativo no son lo suficientemente amigables, se adopta el knife4j de código abierto doméstico y se crea un statuser para facilitar el uso de los usuarios de springboot.
Generador de códigos:
Un conjunto de generador de código se personaliza basado en Mybatis-plus-generator. Al configurar las anotaciones de los campos de la base de datos, genera automáticamente clases de enumeración, anotaciones de diccionario de datos, SaveDTO, UpdateDTO, anotaciones de reglas de validación de formularios, anotaciones Swagger, etc.
Programador de tareas cronometrado:
La función se mejora en función de xxl-jobs. (Por ejemplo: enviar tareas a una hora determinada, proyectos combinados de ejecutor y programador, múltiples fuentes de datos)
Currículum de archivo grande / punto de interrupción / fragmento:
El front-end usa webupload.js y el back-end usa NIO para realizar un gran punto de interrupción de archivos y una reanudación fragmentada. Después de iniciar los servicios Eureka, Zuul y File, abra directamente docs / chunkUploadDemo / demo.html para realizar pruebas. Después de la prueba, el servicio de archivos se inicia con un límite local de 128M de la memoria máxima de la pila, y un archivo grande de 4.6G + se puede cargar con éxito en 5 minutos. El consumo de tiempo del servicio oficial se verá afectado por el ancho de banda del usuario y el servidor, y el tiempo será relativamente largo.
Transacción distribuida:
Integre el middleware de transacciones distribuidas de Ali: seata, para resolver los problemas de transacciones distribuidas que enfrentan los microservicios de una manera eficiente e intrusiva para el negocio .
Lanzamiento gris:
para resolver actualizaciones y lanzamientos frecuentes de servicios, reversiones de versiones, iteración rápida y desarrollo colaborativo dentro de la empresa, este proyecto utiliza una estrategia de equilibrio de carga de cinta modificada para lograr el lanzamiento gris.
Inyección automática de datos asociados:
Se utiliza para resolver el dolor de los atributos de datos de paginación de tablas cruzadas, bases de datos cruzadas, servicios cruzados o atributos de objeto único que hacen eco de los datos asociados, y admite la inyección automática de atributos de datos estáticos (diccionario de datos) y datos de clave primaria dinámica.
Dirección del código del proyecto
proyecto | albergue | github | Observaciones |
Proyecto de micro servicio | https://gitee.com/zuihou111/zuihou-admin-cloud | https://github.com/zuihou/zuihou-admin-cloud | Código de backend de la versión SpringCloud |
Proyecto único | https://gitee.com/zuihou111/zuihou-admin-boot | https://github.com/zuihou/zuihou-admin-boot | Código de backend de la versión SpringBoot |
Antecedentes del inquilino | https://gitee.com/zuihou111/zuihou-ui | https://github.com/zuihou/zuihou-ui | | Interfaz para clientes |
Antecedentes de desarrollo y operación | https://gitee.com/zuihou111/zuihou-admin-ui | https://github.com/zuihou/zuihou-admin-ui | Utilizado por el personal interno de desarrollo, operación, operación y mantenimiento de la empresa. |
Generador de códigos | https://gitee.com/zuihou111/zuihou-generator | https://github.com/zuihou/zuihou-generator | Los desarrolladores usan |
Kit de herramientas básico | https://gitee.com/zuihou111/zuihou-commons | https://github.com/zuihou/zuihou-commons | Kit de herramientas básico |
Dirección de demostración (la cuenta de demostración no tiene permiso de escritura, solo consulta)
proyecto | Dirección de demostración | Cuenta de administrador | Cuenta ordinaria |
Antecedentes del inquilino | http://tangyh.top:10000/zuihou-ui | zuihou / zuihou | prueba / zuiou |
Antecedentes de desarrollo y operación | http://tangyh.top:180/zuihou-admin-ui | demoAdmin / zuihou | No |