Java统一异常处理(配置文件集中化定义)

0、前言
      无论任何项目,都避免不了在运行期间出现的一些异常,并伴随着因业务逻辑的需要而给出相应的提示,使得系统变得更加友好,这类提示处理,我们统称为异常处理(exceptiona handling)。

     在项目中异常处理所抛出的异常码、异常提示 ,都需要进行一定的封装,以确保异常的统一,提高程序的可维护性。而不是随心所欲的来进行异常提醒,如:一些硬编码异常信息(throw new Exception("系统处理异常")),随着想项目的变大、开发人员的不同,这些异常码可能会五花八门,没有统一标准,给用户提示、给开发很容易带来些许的困惑。 

    本文不是讲解如何正确使用try、catch、finally等进行异常捕获,而是就异常码、异常信息进行封装,通过配置文件进行集中化定义,来统一异常处理,让异常处理变得更标准化、统一化,方便维护、管理。

1、异常处理
    异常处理,又称为错误处理,提供了处理程序运行时出现的任何意外或异常情况的方法。异常处理使用 try、catch 和 finally 关键字来尝试可能未成功的操作,处理失败,以及在事后清理资源。

异常发生的原因有很多,通常包含以下几大类:

用户输入了非法数据。
要打开的文件不存在。
网络通信时连接中断,或者JVM内存溢出。
这些异常有的是因为用户错误引起,有的是程序错误引起的。

要理解Java异常处理是如何工作的,你需要掌握以下三种类型的异常:

检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。


所有的异常类是从 java.lang.Exception 类继承的子类。

Exception 类是 Throwable 类的子类。除了Exception类外,Throwable还有一个子类Error 。

Java 程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。

Error 用来指示运行时环境发生的错误。例如,JVM 内存溢出。一般地,程序不会从错误中恢复。

异常类有两个主要的子类:IOException 类和 RuntimeException 类。

本文就针对处理的是Exception类异常。

   

2、统一异常处理
     本实战中将异常码、异常信息进行封装,通过properties配置文件进行集中化定义,并支持国际化异常码的定义,来统一异常处理。

2.1 消息结果的封装
全系统统一返回的数据格式为:

{
    "statusCode":"00000000",
    "msg":"成功",
    "data": {
        "username":"xcbeyond",
        "sex":"男",
        "age":18
    }
}
标准的json字符串,statusCode:状态码,msg:提示信息,data:结果数据(以实际数据而定的json)。

定义一个实体类Result,用来封装消息返回数据,如下:

package com.xcbeyond.execption.data;
 
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.xcbeyond.execption.util.ObjectUtils;
 
import java.io.Serializable;
 
/**
 * 返回结果
 * @Auther: xcbeyond
 * @Date: 2019/5/24 17:55
 */
@JsonInclude(value = JsonInclude.Include.NON_NULL)
public class Result implements Serializable {
    //状态码
    private String statusCode;
    //提示信息
    private String msg;
    //结果数据
    private Object data;
 
    public Result() {
 
    }
 
    public Result(String statusCode, String msg) {
        this.statusCode = statusCode;
        this.msg = msg;
    }
 
    public String getStatusCode() {
        return statusCode;
    }
 
    public void setStatusCode(String statusCode) {
        this.statusCode = statusCode;
    }
 
    public String getMsg() {
        return msg;
    }
 
    public void setMsg(String msg) {
        this.msg = msg;
    }
 
    public Object getData() {
        return data;
    }
 
    public void setData(Object data) {
        this.data = data;
    }
 
    /**
     * 重写toString方法,让Result对象以json字符串形式存在
     * @return
     *  Json字符串
     */
    @Override
    public String toString() {
        JSONObject json = new JSONObject();
        json.put("statusCode", this.statusCode);
        json.put("msg", this.msg);
        if (null != this.data) {
            json.put("data", ObjectUtils.modelToMap(this.data));
        }
        return json.toJSONString();
    }
}

更多请见:http://www.mark-to-win.com/tutorial/50312.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Spring Boot 中,可以使用 YAML(YAML Ain't Markup Language)文件配置定时任务。YAML 是一种人类友好的数据序列化格式,它可以用来替代传统的 XML 或 Properties 文件,更加简洁和易读。 使用 YAML 文件配置定时任务可以实现以下作用: 1. 配置定时任务的触发时间和执行逻辑:通过 YAML 文件可以指定定时任务的触发时间表达式(Cron 表达式)和执行的具体逻辑。这样,可以方便地在应用程序中定义和管理多个定时任务。 2. 避免硬编码:将定时任务的配置信息从源代码中分离出来,以便于灵活地修改和调整。通过 YAML 文件,可以在不重新编译和部署应用程序的情况下更改定时任务的配置。 3. 统一管理配置信息:将所有的定时任务配置信息集中在一个 YAML 文件中,可以方便地进行统一管理和维护。这样,可以减少重复劳动和错误,并提高配置的可读性和可维护性。 使用 YAML 文件配置定时任务的步骤如下: 1. 在 Spring Boot 项目的 resources 目录下创建一个名为 application.yml 或 application.yaml 的 YAML 文件。 2. 在 YAML 文件中使用 cron 表达式配置定时任务的触发时间,例如: ```yaml spring: task: scheduling: cron: expression: "0 0 * * * ?" # 每天凌晨执行一次 ``` 3. 在应用程序中添加 @EnableScheduling 注解来启用定时任务的支持。 4. 在需要执行定时任务的方法上添加 @Scheduled 注解,并根据需要指定触发时间和执行逻辑。例如: ```java import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class MyTask { @Scheduled(cron = "0 0 * * * ?") // 每天凌晨执行一次 public void doTask() { // 执行定时任务的逻辑 System.out.println("定时任务执行了!"); } } ``` 通过以上步骤,就可以使用 YAML 文件配置定时任务,并在 Spring Boot 应用程序中实现定时任务的自动触发和执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值