从Controller类调用时,事务回滚不起作用,但在从Test Class调用时起作用

时间:2017-12-11 05:58:14

标签: java database spring transactions

首先,我一直在寻找答案,但即使经过5个小时的搜索,我仍然找不到答案。

总结:我的Transactional类在我的Controller类中调用时不回滚,但在我的JUnit测试类中调用它时,它会执行回滚。

控制器

@RestController
public class NotifyServerController extends BaseController {

...

@RequestMapping(value = PathConstants.PATH_NOTIFY_SERVER, method = RequestMethod.POST)
public WiremoRoot notifyServer(// parameters //) throws SQLException {
    ... authentication and other if statements

    // State monitoring request (control box information)
    else if(content instanceof SpecificRequest){
        response.getContents().setContent(serviceObj.processRequest(request));
    }  else
        throw new InputErrorException();

    return response;
}

}

ServiceObjectImplementation

@Service(// Qualifier //)
@Transactional
public class ServiceClassImplementation implements ServiceClass {

    // -- Dao objects here

    /**
     * {@inheritDoc}
     */
    public Response processRequest(// parameters //) throws SQLException {
        ...
        methodA();
    }

    public void methodA(){
        ...
        throw new RuntimeException();
    }
    ...

}

请注意,在我的Test类中调用它时,它会成功回滚。从RestController调用它时不起作用。

1 个答案:

答案 0 :(得分:0)

显然,我的tx-annotation语句在我的db-context.xml中,这就是为什么它不在实际构建中工作但是在我的测试类中工作,因为在我的测试类中,我专门加载了我的配置。所以我将我的tx-annotation语句放在我的dispatcherServlet(servlet-context.xml)中并且它有效。