Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

964
Vistas
Al llamar a un método no transaccional de primavera desde un método transaccional en otra instancia, ¿se propaga la transacción?

Lo siento si esto se ha discutido antes, pero simplemente no pude encontrar la respuesta en todas las discusiones relacionadas sobre la anotación java @Transactional spring.

¿Qué sucede si llamamos a un método en otra instancia que no tiene una anotación @Transactional desde un método que tiene una anotación @Transactional? ¿Se suspenderá la transacción del método anotado @Transactaional? o se propagaría?

Encontré muchas discusiones sobre si la llamada al segundo método es de la misma instancia, pero no si el segundo método no transaccional está en otra instancia. ¡Gracias por tu ayuda!

Como en el ejemplo a continuación, ¿qué sucedería si se llama a methoda() en la clase B desde methoda() en la clase A? ¿Se propagaría la transacción de methoda o methodb no sería transaccional?

Código de ejemplo a continuación:

 public class A { @Autowired B b; @Transactional public void methoda(){ b.methodb(); } } @Component public class B { //this method is non transactional and is called from method A in class A public void methodb() { //do some db updates } }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Si no hay anotaciones @Transactional en B para indicar lo contrario, entonces el método b usa la transacción establecida en la llamada a A.methoda. Esto es normal para Spring, tenemos componentes marcados como transaccionales que llaman a DAO que participan en la transacción actual sin estar marcados como transaccionales.

Si realmente desea suspender la transacción actual, puede agregar esta anotación al método b:

 @Transactional(propagation = Propagation.NOT_SUPPORTED)

Hay una advertencia sobre la suspensión de transacciones en el documento de Spring API:

NOTA: La suspensión real de transacciones no funcionará de manera inmediata en todos los administradores de transacciones. Esto en particular se aplica a JtaTransactionManager, que requiere que javax.transaction.TransactionManager esté disponible para él (que es específico del servidor en Java EE estándar).

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda