【问题标题】:Spring Transactional DAO, exceptions swallowedSpring Transactional DAO,吞下异常
【发布时间】:2012-06-22 17:39:26
【问题描述】:

我使用 Hibernate 作为 ORM,并且我的 DAO 使用 @Repository 注释。

我已经以这种方式配置了 AOP 建议。

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="save*" propagation="REQUIRED" />
        <tx:method name="edit*" propagation="REQUIRED" />
        <tx:method name="*" read-only="true" />
    </tx:attributes>
</tx:advice>

它们工作得很好,只是如果在这些方法中发生任何 sql 异常,它们不会被捕获,因此不会被打印出来!我猜是因为事务在执行该方法后提交,但我不确定。

我该如何处理?

【问题讨论】:

  • 你确定你在某处没有 try/catch 吗?
  • 我在上下文中配置了异常解析器以获得更好的用户体验。 org.springframework.web.servlet.handler.SimpleMappingExceptionResolver 捕获所有异常并重定向到某个视图。我删除了它,现在它捕获并打印 HibernateExceptions,好消息。但是我仍然想保留异常解析器,您有什么想法并在控制台中打印异常吗?谢谢你给我这个主意。

标签: java spring aop dao


【解决方案1】:

看看this similar post。它建议扩展 SimpleMappingExceptionResolver

public class LoggingExceptionResolver extends SimpleMappingExceptionResolver {
private Logger logger = LoggerFactory.getLogger(LoggingExceptionResolver.class);

@Override
protected void logException(Exception ex, HttpServletRequest request) {
    this.logger.warn(buildLogMessage(ex, request), ex);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 2018-08-25
    • 2018-05-26
    • 2012-03-06
    相关资源
    最近更新 更多