Cómo envolver varias aplicaciones Spring Boot en una sola

7

Estoy trabajando en un equipo que está desarrollando nuevas versiones de aplicaciones web para nuestras soluciones anteriores, pero también hay algunas ideas innovadoras. Estamos utilizando Angular en la parte delantera, Java en la parte posterior, MongoDB para la base de datos y ejecutándolo a través de Spring Boot.

En la etapa actual, tenemos dos aplicaciones terminadas y más en desarrollo. Ahora, los ejecutamos separados, son aplicaciones diferentes que se ejecutan en diferentes puertos con propósitos muy específicos, con la única excepción del diseño, ya que nos esforzamos un poco por mantener algún tipo de patrón de usabilidad.

Sin embargo, ahora miramos cada vez más hacia el futuro y nos damos cuenta de que además de que el objetivo de cada aplicación es muy específico, en realidad componen un producto más grande que podría envolver todo dentro.

Lo que planeamos por ahora, podría ser muy simple de describir, pero quiero leer más sobre eso para asegurarme de que estamos en el camino correcto para integrar las aplicaciones. Básicamente, puede considerar un menú fijo en la parte superior que mostrará todas las aplicaciones disponibles según los permisos de usuario registrados. Después de eso, una vez que él / ella seleccionó uno, el flujo debería ser el mismo que está dentro de la aplicación seleccionada cuando se ejecuta por separado (pero el menú aún).

¿Alguien tiene alguna recomendación o algo que pueda ayudarnos a construir esto de manera adecuada? (ya que será más fácil integrar las cosas ahora que en el futuro)

    
pregunta Patrick Bard 23.08.2016 - 21:50

3 respuestas

2

Estoy bastante seguro de que pueden existir razones para hacerlo, pero dependiendo de las necesidades del negocio, la solución puede ser muy diferente. Estas son las dos opciones que puede considerar:

  1. La contenedorización de tus aplicaciones . Coloque cada aplicación en un contenedor docker, luego use docker-compose para ejecutar ambas en el mismo servidor al mismo tiempo. Puede utilizar API gateway o proxy para exponer ambos servicios a través de un solo punto de entrada. El beneficio principal es que podrá escalarlo a múltiples servidores, si es necesario, y no necesita tocar el código de la aplicación, preservando la modularidad.

  2. Arquitectura de complementos . Con algunas modificaciones a la configuración de Spring, puede tratar las aplicaciones originales como complementos, implementando algunas API. Pones las configuraciones de complementos en alguna carpeta de classpath común, por ejemplo. /META-INF/plugins/pluginN.xml , por lo que será detectable por la aplicación host. Usted escribe la aplicación host Spring Boot, que cargará los complementos a través de Spring DI buscando las configuraciones en el classpath. Los complementos contribuirán con los mapeos de solicitud para la configuración de la aplicación WebMVC, exponiendo su parte de funcionalidad. Pros: a) aún conservas la modularidad. b) Tamaño de imagen más pequeño y uso de memoria / CPU en el servidor. Contras: requiere una reflexión cuidadosa sobre la configuración de Spring y la arquitectura de complementos. No es escalable en el sentido de la "arquitectura de microservicio" (aún se puede implementar en múltiples máquinas como una sola aplicación haciendo todo).

respondido por el Ivan Gammel 23.10.2016 - 18:34
0

Pues no. No componen una "aplicación más grande" a menos que quieras que lo hagan.

Te diriges por el camino de Microsoft Office. Estás contemplando hacer un monolito. Esta es una decisión de negocios. Una por la que serás juzgado. No tiene nada que ver con un mejor diseño.

Lo que tiene que ver con un mejor diseño es la integración que mencionaste. Tratar muy duro de presentar una experiencia de usuario uniforme es bueno. Tenerlos trabajando juntos es bueno. Esto es exactamente lo que son las herramientas de línea de comandos de UNIX. Trabajan juntos. Tienen una manera uniforme de interactuar con ellos. No son un monolito. Son muchas herramientas pequeñas que funcionan bien juntas. Están integrados.

Si quieres hacer una multa monolítica. Pero no digas que es la única forma de hacer que las aplicaciones funcionen juntas. Esa es una elección independiente.

Si simplemente quiere una forma de indicar qué tan bien están integrados en su marketing, simplemente asigne a sus iconos un tema coherente.

    
respondido por el candied_orange 23.08.2016 - 22:44
0

Al parecer, la solución no es la solución. Si desea un solo contenedor, genere las aplicaciones como archivos war e impleméntelos en un solo contenedor.

Es posible que aún te quedes con el problema de volver a llamar al contenedor para acceder a diferentes capas. Es posible que desee empaquetar ciertos módulos como bibliotecas y usarlos directamente. Ya habrá desarrollado un módulo desacoplado, manténgalo así usando su interfaz.

    
respondido por el BillThor 24.08.2016 - 02:00

Lea otras preguntas en las etiquetas