如何捕捉spring boot项目的数据库连接异常

1.特地未授权,进行数据库连接,报错如下:java.sql.SQLException: null, message from server: "Host 'MACBOOKPRO-FDAF' is not allowed to connect to this MySQL server"

2.但是会一直尝试连接,application.properites有如下配置,还是一直在尝试连接,整个应用没有运行下去:

spring.datasource.test-on-borrow=false  
spring.datasource.continue-on-error=true

3.请问各路大神,如果捕捉这些异常进行处理,并让程序执行下去???

阅读 11.6k
2 个回答

SpringBoot中一般可以捕获特定的异常,然后做出特定的处理,你可以自己定义一个Handler来处理异常,比如你这里的SQLException,给你贴一段代码你可以参考一下:

**
 * 处理卖家端权限校验异常的类
 *
 * @author lemon
 * @date 2017/12/26 下午5:33
 */
@ControllerAdvice
public class SellerAuthorizeExceptionHandler {

    @Autowired
    private ProjectUrlConfiguration projectUrlConfiguration;

    /**
     * 处理SellerAuthorizeException异常
     *
     * @return ModelAndView对象
     */
    @ExceptionHandler(value = {SellerAuthorizeException.class})
    public ModelAndView handlerSellerAuthorizeException() {
        return new ModelAndView("redirect:"
                .concat(projectUrlConfiguration.getWechatOpenAuthorize())
                .concat("/sell/wechat/qrAuthorize")
                .concat("?returnUrl=")
                .concat(projectUrlConfiguration.getSell())
                .concat("/sell/seller/login"));
    }
}

在这段代码中,我定义了一个Handler来处理SellerAuthorizeException,当抛出这个异常后,就会去跳转到我指定的链接中去。@ControllerAdvice注解就是统一异常处理的注解,@ExceptionHandler注解就是捕获特定的异常,标注在方法上。

看看@ControllerAdvice的使用

@ControllerAdvice
public class ExceptionHandlingControllerAdvice {

    protected Logger logger;

    public ExceptionHandlingControllerAdvice() {
        logger = LoggerFactory.getLogger(getClass());
    }
    
    /**
     * SQLExceptionについては例外を通知しない
     * 例外が返される
     * @param exception
     * @return
     */
    @ExceptionHandler({ SQLException.class })
    public String databaseError(Exception exception) {
        logger.error("Request raised " + exception.getClass().getSimpleName());
        return "Global_databaseError";
    }
}

参考:

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题