我正致力于使用Spring 3和Hibernate 3.6开发Web应用程序.我对@Transactional Annotation和代码结构有一些疑问.
– >当我使用@Transactional(使用Spring进行事务管理)时,是否必须在调用它们时使用try / catch包围@Transactional-annotated方法?
例如,当我得到一个加载,更改并返回一个对象的方法然后我从另一个类调用它时:我是否必须使用try / catch包围调用?也许出了点问题,没有返回任何对象,数据库连接失败..我不知道.
到目前为止,我认为@Transactional会关注所有可能发生的异常,并在发生错误时回滚此事务中的每个操作.
但如果它发生,我必须以某种方式通知用户.当我在try-block中调用transactional-method并回滚它时,catch块被激活了?
我可以告诉用户“出了问题”.否则用户可能不会被告知?
或者是否足以检查是否有返回的对象(如果/ else),那么我不需要try / catch?
我是新的,我想听听其他结构如何编码.谢谢 :-)
最佳答案
使用HandlerExceptionResolvers和@ExceptionHandlers,Spring中的Handling exceptions非常简单.我倾向于独占使用@ExceptionHandler.
原文链接:https://www.f2er.com/spring/432144.html您可以使用@ExceptionHandler来处理特定异常,而不是在try-catch块中自己处理它.
@ExceptionHandler(NotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public void handleNotFoundException(NotFoundException exc) {
// log something.
}
如果存在服务器问题,您希望发送500
@ExceptionHandler(SomeException.class)
public void handleException(SomeException exc,WebRequest request,HttpServletResponse response) {
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Sorry dude,my server broke");
}
您还应该狭隘地处理异常.通常你不应该做@ ExceptionHandler(Exception.class),我也相信它按顺序工作,所以如果你处理一般的Exception,它应该是类中的最后一个方法.