JHipster 3.8.0中Spring @Transactional不生效且无日志输出求助
JHipster中@Transactional方法未生成预期事务日志的排查方案
问题描述
我正在使用JHipster 3.8.0,某个标注了@Transactional的方法未生成预期日志,已配置logging.level.org.springframework.transaction.interceptor = TRACE。
相关代码
... @Repository public class CustomAuditEventRepository implements AuditEventRepository { private static final String AUTHORIZATION_FAILURE = "AUTHORIZATION_FAILURE"; private final PersistenceAuditEventRepository persistenceAuditEventRepository; private final AuditEventConverter auditEventConverter; public CustomAuditEventRepository(PersistenceAuditEventRepository persistenceAuditEventRepository, AuditEventConverter auditEventConverter) { this.persistenceAuditEventRepository = persistenceAuditEventRepository; this.auditEventConverter = auditEventConverter; } @Override @Transactional(propagation = Propagation.REQUIRES_NEW) public void add(AuditEvent event) { if (!AUTHORIZATION_FAILURE.equals(event.getType()) && !Constants.ANONYMOUS_USER.equals(event.getPrincipal())) { PersistentAuditEvent persistentAuditEvent = new PersistentAuditEvent(); persistentAuditEvent.setPrincipal(event.getPrincipal()); persistentAuditEvent.setAuditEventType(event.getType()); persistentAuditEvent.setAuditEventDate(event.getTimestamp()); Map<String, String> eventData = auditEventConverter.convertDataToStrings(event.getData()); persistentAuditEvent.setData(truncate(eventData)); persistenceAuditEventRepository.save(persistentAuditEvent); } } private Map<String, String> truncate(Map<String, String> data) { .... } }
系统配置
- jhipsterVersion: "6.9.1"
- databaseType: "mongodb"
排查思路
- 确认MongoDB事务支持是否生效:Spring Data MongoDB 3.0+才支持事务,且MongoDB服务器需为4.0+的副本集模式(单节点默认不支持事务)。JHipster 6.9.1对应的Spring Data版本可能未达到要求,若事务本身无法创建,自然不会生成日志。
- 验证日志配置是否生效:检查对应环境的配置文件(如
application-dev.yml)中logging.level.org.springframework.transaction.interceptor是否确实设为TRACE,可临时添加另一个类的TRACE日志(如org.springframework.data.mongodb),确认日志框架能正常输出TRACE级别内容。 - 检查方法调用是否走代理:Spring动态代理仅拦截外部类对
add方法的调用,若该方法被本类内部方法调用,事务代理不会生效,日志也不会产生。确认调用方为外部类实例。 - 排查日志过滤规则:部分日志框架(如Logback)的配置可能存在过滤器,屏蔽了TRACE级别的日志。检查日志配置文件中的过滤规则,确保未拦截
org.springframework.transaction.interceptor的日志输出。 - 测试事务传播属性:当前使用
Propagation.REQUIRES_NEW,若MongoDB不支持事务,该属性会被忽略。可临时替换为默认的Propagation.REQUIRED,观察是否有日志输出。 - 确认方法是否被执行:在
add方法开头添加自定义日志,验证方法确实被调用,排除因业务逻辑(如条件判断跳过执行)导致无日志的情况。
内容的提问来源于stack exchange,提问作者Adam D
相关产品推荐
相关产品推荐

