Java jdk8中写一个全局的异常捕获,mysql执行sql抛出异常后捕获并根据异常的关键信息,选择对应的枚举抛出异常信息,比如执行sql抛出“Data truncation:Data too long for column”异常则选择"数据过长,无法保存到某列"的枚举进行抛出。这样的功能该怎么写
时间: 2024-02-05 19:12:24 浏览: 99
JAVA 自定义异常 全局捕获
可以使用Java中的异常处理机制来实现全局的异常捕获和处理,具体步骤如下:
1. 创建一个全局异常处理类,实现`Thread.UncaughtExceptionHandler`接口,重写`uncaughtException`方法,在该方法中实现对异常的处理逻辑。
```
public class GlobalExceptionHandler implements Thread.UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread t, Throwable e) {
// 异常处理逻辑
}
}
```
2. 在程序入口处设置全局异常处理器。
```
Thread.setDefaultUncaughtExceptionHandler(new GlobalExceptionHandler());
```
3. 在异常处理逻辑中,根据异常信息选择对应的枚举并抛出异常。可以使用`instanceof`关键字判断异常类型,并根据异常信息判断抛出哪个枚举异常。
```
public class GlobalExceptionHandler implements Thread.UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread t, Throwable e) {
if (e instanceof SQLException) {
SQLException sqlEx = (SQLException) e;
if (sqlEx.getMessage().contains("Data too long for column")) {
throw new EnumException(EnumExceptionType.DATA_TOO_LONG_FOR_COLUMN);
}
// 其他SQLException处理逻辑
}
// 其他异常处理逻辑
}
}
```
4. 枚举异常类的实现。可以定义一个`EnumExceptionType`枚举类,其中包含不同类型的枚举值。每个枚举值都包含一个错误码和错误信息。在`EnumException`异常类中,可以通过传入的枚举值来获取对应的错误码和错误信息。
```
public enum EnumExceptionType {
DATA_TOO_LONG_FOR_COLUMN(1001, "数据过长,无法保存到某列"),
// 其他枚举值
;
private int code;
private String message;
EnumExceptionType(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
}
public class EnumException extends RuntimeException {
private EnumExceptionType type;
public EnumException(EnumExceptionType type) {
this.type = type;
}
public int getCode() {
return type.getCode();
}
public String getMessage() {
return type.getMessage();
}
}
```
这样,当程序中出现`Data truncation:Data too long for column`异常时,就会抛出`EnumException`异常,并且异常信息中包含对应的错误码和错误信息。其他类型的异常也可以在全局异常处理器中进行相应的处理逻辑。
阅读全文