Configuré el resorte con compatibilidad transaccional. ¿Hay alguna forma de registrar transacciones solo para asegurarme de que configuré todo correctamente? Mostrar en el registro es una buena manera de ver lo que está sucediendo.Mostrando una transacción de primavera en el registro
Respuesta
en su log4j.properties
(por madereros alternativos, o el formato XML de log4j, comprobar los documentos)
En función de su administrador de transacciones, puede establecer el nivel de registro de la marco de primavera para que te brinde más información sobre las transacciones. Por ejemplo, en el caso de utilizar JpaTransactionManager
, se establece
log4j.logger.org.springframework.orm.jpa=INFO
(este es el paquete de la de su administrador de transacciones), y también
log4j.logger.org.springframework.transaction=INFO
Si INFO
no es suficiente, utiliza DEBUG
Como puede acceder a las clases Spring en tiempo de ejecución, puede determinar el estado de la transacción. Este artículo puede ayudarle a:
enlace roto .... – Gab
Muy roto, pero intente: [Sugerencias para la depuración de la anotación @Transactional de Spring] (http://blog.timmattison.com/archives/2012/04/19/tips-for-debugging-springs -transactional-annotation /) (aún no lo he probado). Utiliza [TransactionSynchronizationManager] (https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/support/TransactionSynchronizationManager.html) para obtener el estado de la transacción. El código probablemente debería usar una variable local de subprocesos para almacenar en caché la referencia a 'isActualTransactionActive()' en lugar de recuperarla en cada llamada de registro. –
La información de registro más interesante de JtaTransactionManager.java
(si esta pregunta todavía se trata del JtaTransactionManager
) está registrada en DEBUG
prioridad. Asumiendo que tiene un log4j.properties
algún lugar en la ruta de clases, por lo tanto me gustaría sugerir a utilizar:
log4j.logger.org.springframework.transaction=DEBUG
podría permitir el registro de JDBC, así:
log4j.logger.org.springframework.jdbc=DEBUG
Para mí, un buen registro de configuración para agregar era :
log4j.logger.org.springframework.transaction.interceptor = traza
Mostrará me Log así:
2012-08-22 18: 50: 00.031 TRACE - Obtención de transacción para [com.MyClass.myMethod]
[mis propias declaraciones de registro de método COM .MyClass.myMethod]
2012-08-22 18: 50: 00 142 TRACE - Finalización de transacción para [com.MyClass.myMethod]
¡Genial! No es necesario tener todo el registro de información/depuración/rastreo de otros paquetes, cuando esto es lo que está buscando: D – Johanneke
para la aplicación del resorte de arranque:
logging.level.ROOT=INFO
logging.level.org.springframework.orm.jpa=DEBUG
logging.level.org.springframework.transaction=DEBUG
Aquí hay un código que uso en mi implementación de Logback Layout derivado de ch.qos.logback.core.LayoutBase.
Creo una variable de subproceso local para almacenar la referencia al método org.springframework.transaction.support.TransactionSynchronizationManager.isActualTransactionActive()
. Cada vez que se imprime una nueva línea de registro, se llama al getSpringTransactionInfo()
y devuelve una cadena de un carácter que irá al registro.
Referencias:
- Tips for Debugging Spring's @Transactional Annotation
- org.springframework.transaction.support.TransactionSynchronizationManager
- java.lang.ThreadLocal
- java.lang.Class.getMethod()
Código:
private static ThreadLocal<Method> txCheckMethod;
private static String getSpringTransactionInfo() {
if (txCheckMethod == null) {
txCheckMethod = new ThreadLocal<Method>() {
@Override public Method initialValue() {
try {
ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
Class<?> tsmClass = contextClassLoader.loadClass("org.springframework.transaction.support.TransactionSynchronizationManager");
return tsmClass.getMethod("isActualTransactionActive", (Class<?>[])null);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
};
}
assert txCheckMethod != null;
Method m = txCheckMethod.get();
String res;
if (m == null) {
res = " "; // there is no Spring here
}
else {
Boolean isActive = null;
try {
isActive = (Boolean) m.invoke((Object)null);
if (isActive) {
res = "T"; // transaction active
}
else {
res = "~"; // transaction inactive
}
}
catch (Exception exe) {
// suppress
res = "?";
}
}
return res;
}
- 1. ¿Una conexión en la transacción de primavera?
- 2. nueva transacción en el frijol de primavera
- 3. transacción Primavera partes internas
- 4. Cómo utilizar la transacción primavera en multihilo
- 5. Transacción de primavera: confusión de proxy
- 6. error al implementar la transacción de primavera
- 7. Registro de TSQL dentro de la transacción
- 8. Problema de propagación de la transacción de primavera
- 9. Revertir transacción utilizando registro de transacciones
- 10. ¿@Transactional retrotrae automáticamente la transacción en la primavera 3?
- 11. Pregunta sobre la propagación de la transacción de primavera
- 12. Integración de primavera: dificultad con la transacción entre 2 activadores
- 13. mostrando una imagen en cacao
- 14. Forma correcta de autoautar una sesión de Hibernate en una prueba de la JUnit de la transacción de primavera
- 15. Mostrando una UIActionSheet
- 16. Mostrando el símbolo ® en Silverlight
- 17. Cómo obtener el número de filas insertadas por una transacción
- 18. Mostrando una imagen de fondo en UIWebView
- 19. @Transactional primavera no se inicia una transacción mientras se prueba con junit4
- 20. Transacción dentro de la transacción
- 21. Transacción distribuida completada. O bien aliste esta sesión en una nueva transacción o la transacción NULA
- 22. Mostrando imagen en el resumen de ListPreference
- 23. Mostrando anuncio en AndEngine
- 24. Mostrando una animación .gif en QLabel
- 25. Extraño comportamiento de la compatibilidad de la transacción de primavera para JPA + Hibernate + @ Anotación transaccional
- 26. Django, mostrando una vista en otra vista?
- 27. Mostrando una columna QTableView oculta
- 28. reglas de herencia primavera @Transactional
- 29. Hibernate JPA y primavera javax.persistence.TransactionRequiredException: no hay ninguna transacción en curso
- 30. Mostrando informes HTML en el panel CruiseControl
El nivel 'INFO' no mostrará ninguna actividad tx en absoluto, sería demasiado detallado. 'DEBUG' será necesario allí. – skaffman
No funciona para spring3.x – janwen
@Bozho Tengo JpaTransactionManager y quiero monitorear cuándo se toma prestada una conexión del pool y cuándo se lanzó para una transacción específica. – Ali