首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有web的Spring异常监听器

没有web的Spring异常监听器
EN

Stack Overflow用户
提问于 2016-02-13 23:31:40
回答 1查看 1.1K关注 0票数 1

我希望捕获应用程序中发生的所有异常/错误。

为此,我搜索堆栈溢出,并在这个问题上结结巴巴地说:Java Exception Listener

现在我想知道能否以更好的方式完成这一任务。

我目前的申请:

我在一个独立的代码中使用Spring框架和Spring,而不使用web组件。我有一个包含四个主要Beans的Config.java文件:

  • 时间织布
  • 数据源
  • 实体经理工厂
  • 事务管理器

我现在认为,我可能需要以下几点:

代码语言:javascript
复制
package me.test;

import java.beans.ExceptionListener;
import org.springframework.stereotype.Component;

@Component
public class ErrorListener implements ExceptionListener {
    @Override
    public void exceptionThrown(Exception e) {
        System.out.println("Some error occured ... That's bad :(");
    }
}  

我不太确定这个ExceptionListener是否像我希望他工作的那样工作,所以我想也许有人可以向我解释我想要的东西是否可能实现。

也许不是和这个听众,而是用另一种方法?

另一个一般性问题是:

一般情况下,我如何注册听众?是不是也有一个@EventListener的阳极?我是否必须将其放在方法之前,然后让它在spring之前作为组件的一部分进行扫描?

还是我必须在我的上下文中手动注册?

谢谢:)

--编辑--

使用AfterThrowing的想法似乎非常好(见下面的评论)。现在,我的项目如下:

主要是:

代码语言:javascript
复制
new AnnotationConfigApplicationContext(Config.class);

Config.java

代码语言:javascript
复制
@EnableTransactionManagement
@ComponentScan("me.test.*")
@Configuration
@EnableJpaRepositories
@EnableAspectJAutoProxy
public class Config {
    @AfterThrowing(pointcut = "execution(public * *(..)", throwing = "ex")
    public void doRecoveryActions(DataAccessException ex) {
        System.out.println("Error found");
    }
    /* loadTimeWeaver, dataSource, entityManagerFactory and transactionManager with the "@Bean" annotation */
}

然后在随机文件中抛出错误,比如int i2 = 5 / 0;和其他类throw new Exception("test");

但不幸的是,它也不起作用

我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2016-02-14 00:18:14

您可以在抛出建议后使用Spring建议。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35386602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档