transaction management example data transactions spring-mvc

transactions - management - Transaccional: controlador vs servicio



transaction spring data (2)

Considere que tengo un método de control get () que llama a unos pocos métodos de servicio que trabajan con la base de datos.

¿Es correcto hacer que todo el método de control sea transaccional o simplemente con cada método de servicio?

Me parece que debemos hacer que get () sea transaccional porque realiza operaciones asociadas.

¡Gracias!


Eso depende completamente de usted y de cómo interprete su propia lógica comercial.

A Spring no le importa dónde pones los límites de la transacción, y ciertamente no te limita a ponerlos en tus clases DAO.

Entonces sí, agregar @Transactional a sus métodos de controlador es perfectamente válido.


Prefiero hacer solo transaccionales los métodos de servicio que deben ser transaccionales y controlar la transaccionalidad en el servicio que no está en el controlador. Puede crear un método de servicio que englobe otros métodos de servicio y con la transacción de primavera administrar la transacción con propagación en la anotación @Transactional.

@Transactional(propagation =...)

Editar

Si tuviera 2 métodos, por ejemplo saveUser () y saveEmail () (porque almaceno los correos electrónicos en una base de datos para enviarlos más tarde, como una cola) crearía en mi servicio un método saveUserAndSendEmail (usuario) que sería transaccional. Este método llamaría saveUser y saveEmail () a cada uno en un componente @Repository porque tratan con la base de datos. Así que les pondría en los componentes de @Repository los métodos para manejar con la base de datos y luego controlaré la transaccionalidad en el componente @Service. Entonces, el controlador solo tendrá que preocuparse de proporcionar los datos y llamar cuando sea necesario. Pero realizo una transacción porque no quiero comprometer cambios en la base de datos hasta que todo el método se haya ejecutado correctamente.

Pero este es el estilo que suelo usar, no estoy diciendo que este sea el camino a seguir.