Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

573
Views
Cómo registrar beans que pueden ser compartidos por múltiples WAR (Spring boot + Tomcat)

Estoy desarrollando una aplicación con Spring boot e implementando múltiples WAR en un tomcat externo. Quiero registrar un bean compartible con estos WAR cuando se inicie Tomcat.

Yo uso: Java8, Spring boot (2.5.5) y Tomcat9

Bean quiero ser compartido por aplicaciones:

 public class TestData { private String username; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } }

SampleApp (hay varias aplicaciones que conectan automáticamente una instancia de TestData de la misma manera):

 @SpringBootApplication @RestController public class App extends SpringBootServletInitializer { @Autowired TestData testData; public static void main(String[] args) { SpringApplication.run(App.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(App.class); } @RequestMapping(value = "SampleApp1", method = RequestMethod.GET) public String getUsername() { return testData.getUsername(); } }
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Creo que su pregunta es sobre compartir los datos de un Bean único entre diferentes contenedores de aplicaciones implementados en el mismo servidor web.

Esto no es posible por razones de seguridad. Cada aplicación implementada tiene su propio cargador de clases y, por lo tanto, no puede acceder fácilmente a los beans que residen en la memoria de los otros contenedores.

Le sugiero que agregue un microservicio al que acceden las diferentes aplicaciones implementadas y lo use en su lugar. Se puede acceder fácilmente a través de, por ejemplo, OpenFeign como cliente y casi parece un frijol con getters y setters si se hace correctamente.

over 4 years ago · Santiago Trujillo Report

0

Hay varios enfoques para su problema, resolviéndolo en diferentes niveles.

  1. Cree una biblioteca compartida con las cosas necesarias e instálela en el servidor Tomcat. "Instalar" normalmente significa poner los archivos jar ensamblados en el directorio $CATALINA_HOME/lib o similar. Class Loader HOW-TO puede brindarle más detalles. No estoy seguro de cómo funciona con instancias compartidas de clases, pero definitivamente es posible compartir clases (fábricas, por ejemplo) y configuraciones a través de una biblioteca compartida. Con la configuración compartida y las fábricas, al menos puede producir beans idénticos (no necesariamente iguales , pero parece suficiente para su caso).

  2. Defina un recurso JNDI compartido entre todas las aplicaciones. Por supuesto, esto requiere que Tomcat pueda acceder a su clase, por lo que primero debe pasar por la opción 1. De esta manera, puede tener una instancia "publicada" de una clase compartida entre todas las aplicaciones. Los detalles se pueden encontrar en JNDI Resources HOW-TO . Con este enfoque, puede inyectar un recurso publicado con la anotación @Resource .

  3. Cree un microservicio (como sugiere una de las otras respuestas) que pueda proporcionarle datos y funciones y acceder a ellos desde su aplicación. Esto le brinda la máxima flexibilidad, pero también aporta complejidad que requiere una comunicación real con el microservicio.

Obviamente, las opciones 1 y 2 requieren acceso directo a la configuración del servidor.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!