Aplicación práctica del complemento de carga dinámica jvm-sandbox
En la práctica, cuando se desarrollan algunos de nuestros puntos de función, necesitamos reiniciar la implementación para poder aplicar la función. Sin embargo, esta característica es más adecuada para el desarrollo de complementos, que divide la funcionalidad en contenedores individuales para permitir el desmontaje de los puntos de función.
Supongamos que tenemos la capacidad de enviar mensajes de texto y correos electrónicos, y necesitamos agregar la capacidad de enviar mensajes WeChat o DingTalk.
Esperamos que estas dos partes se puedan conectar con las funciones desarrolladas por complementos de terceros. Son dos frascos independientes, cada uno responsable de sus propias funciones.
Una vez que se completa el desarrollo, no es necesario reiniciar la aplicación, simplemente colóquela en una ubicación específica y deje que la aplicación se actualice y cargue los dos frascos directamente.
En realidad, existe una manera de hacer esto, y cuando estaba desarrollando jvm-sandbox recientemente descubrí que tiene una funcionalidad similar.
¿Cómo se hace esto?
Dada una ruta a un jar, busque rutas de paquetes que terminen en jar.
Esta es solo una versión de ejemplo, si aún deseas inyectar en función de las propiedades, puedes descomentar esta sección.
El ejemplo anterior escanea basándose en la interfaz de Componentes, que requiere que el jar defina una clase de implementación en META-INF\services\com.sandbox.manager.api._Components_. Por ejemplo,
Si no quiere complicaciones, puede usar el paquete kohsuke y simplemente definir : en la clase (tenga en cuenta que también necesita implementar la interfaz) en lugar de crear manualmente el archivo y la implementación. .
Introducción al archivo pom:
Puede entender GroupContainerHelper como un Mapa, siempre que los atributos del objeto existan en el Mapa, se asignarán los objetos existentes.
Esta función se implementa casi así. Si es Spring, puede usar una fábrica para resolver esta clase. Clase de escaneo SPI.
Por supuesto, puedes implementar esto como quieras.
En cuanto a cómo cargar paquetes cargados o actualizar y otras funciones, este artículo no entrará en detalles.
Si tienes un buen método, puedes dejarlo en los comentarios.
Si tienes buenas ideas, puedes dejar un mensaje.