java spring transactional

java - combobox netbeans



Mostrando una transacción de primavera en el registro (7)

Configuré la primavera con soporte 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.


Aquí hay un código que uso en mi implementación de Logback Layout derivado de ch.qos.logback.core.LayoutBase .

Creo una variable local de hilo 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 a getSpringTransactionInfo() y devuelve una cadena de un carácter que irá al registro.

Referencias

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; }



La información de registro más interesante de JtaTransactionManager.java (si esta pregunta todavía se trata del JtaTransactionManager ) se registra en la prioridad DEBUG . Suponiendo que tiene un log4j.properties algún lugar en el classpath, sugiero usar:

log4j.logger.org.springframework.transaction=DEBUG


Para la aplicación Spring Boot:

logging.level.ROOT=INFO logging.level.org.springframework.orm.jpa=DEBUG logging.level.org.springframework.transaction=DEBUG


Para mí, una buena configuración de registro para agregar fue:

log4j.logger.org.springframework.transaction.interceptor = trace

Me mostrará log así:

2012-08-22 18: 50: 00,031 TRACE - Obteniendo transacción para [com.MyClass.myMethod]

[mis propias declaraciones de registro del método com.MyClass.myMethod]

2012-08-22 18: 50: 00,142 TRACE - Completando la transacción para [com.MyClass.myMethod]


También puede habilitar el registro JDBC:

log4j.logger.org.springframework.jdbc=DEBUG


en su log4j.properties (para los registradores alternativos, o el formato xml de log4j, verifique los documentos)

Dependiendo de su administrador de transacciones, puede establecer el nivel de registro del marco de trabajo de primavera para que le brinde más información sobre las transacciones. Por ejemplo, en caso de usar JpaTransactionManager , estableces

log4j.logger.org.springframework.orm.jpa=INFO

(este es el paquete del administrador de su transacción), y también

log4j.logger.org.springframework.transaction=INFO

Si INFO no es suficiente, use DEBUG