ホームページ >Java >&#&チュートリアル >Spring Boot アプリケーションで例外とエラーを処理する方法

Spring Boot アプリケーションで例外とエラーを処理する方法

WBOY
WBOYオリジナル
2023-06-23 08:38:291746ブラウズ

Spring Boot アプリケーションを開発する場合、データベース接続の例外、コード ロジック エラー、ユーザー権限の例外、ネットワーク接続の切断など、さまざまな例外やエラーが必然的に発生します。これらの例外とエラーはアプリケーションの安定性と信頼性に大きな影響を与えるため、アプリケーションが確実に実行を継続できるように、これらの例外をタイムリーに処理する必要があります。

この記事では、例外キャプチャ、エラーのデバッグと解決、例外ログなど、Spring Boot アプリケーションで例外とエラーを処理する方法を紹介します。具体的な内容は次のとおりです。

例外のキャッチと処理

  1. try-catch ステートメント

try-catch ステートメントをコードに追加して、例外をキャプチャします。プログラム動作中に例外が発生しました。プログラムで例外が発生すると、catch ステートメント ブロックに入ります。このブロックにロジックを追加して、例外情報をログに出力したり、フロントエンド ユーザーに例外情報を返したりするなど、例外を処理できます。

サンプルコード:

try {
    // 可能发生异常的代码块
} catch (Exception e) {
    // 异常处理逻辑
}
  1. @ControllerAdvice アノテーション

@ControllerAdvice は、Spring MVC で例外をグローバルに処理するために Spring フレームワークによって提供されるアノテーションです。このアノテーションを通じて、グローバル例外処理ロジックを定義し、すべての例外を均一に処理できます。

サンプル コード:

@ControllerAdvice
public class GlobalExceptionHandler {
 
    @ExceptionHandler(value = Exception.class)
    public ResponseEntity<Object> handleException(Exception e) {
        // 异常处理逻辑
        return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

上記のコードでは、handleException メソッドはすべての例外例外を処理し、エラー情報と HTTP ステータス コードを含む ResponseEntity オブジェクトを返すことができます。アプリケーションでは、Exception 例外が発生すると、例外処理のためにこのメソッドが呼び出されます。

  1. カスタム例外クラス

例外を処理する場合、特定の種類の例外を表すように例外クラスをカスタマイズすることもできます。例外クラスをカスタマイズすることで、プログラム内で例外オブジェクトをスローして、プログラムをより明確で理解しやすくすることができると同時に、グローバル例外ハンドラーで対象を絞った例外処理を実行することもできます。

サンプル コード:

// 自定义异常类
public class MyException extends Exception {
 
    public MyException(String message) {
        super(message);
    }
}

// 抛出自定义异常
if (someCondition) {
    throw new MyException("发生了 MyException 异常");
}

// 异常处理逻辑
@ControllerAdvice
public class GlobalExceptionHandler {
 
    @ExceptionHandler(value = MyException.class)
    public ResponseEntity<Object> handleMyException(MyException e) {
        // 自定义异常处理逻辑
        return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

上記のコードでは、プログラムが特定の条件を満たしたときにスローされる MyException 例外クラスを定義します。グローバル例外ハンドラーでは、 @ExceptionHandler(value = MyException.class) アノテーションを使用して、メソッドが MyException タイプの例外を処理できることを示します。

エラーのデバッグと解決

  1. デバッグ モードのデバッグ

デバッグは、アプリケーション エラーを解決するための鍵です。プログラムをデバッグすると、プログラムの状態、変数の値、実行パスなどの情報を確認して、エラーの原因を見つけることができます。 Spring Boot アプリケーションでは、ログ レベルを DEBUG に設定することでデバッグできます。

application.properties ファイルに次のコードを追加します:

logging.level.root=DEBUG

上記のコードでは、ログ レベルのルートを DEBUG に設定します。プログラムを実行すると、プログラム ログにさらにデバッグ情報が出力されます。 。

  1. ログ

エラー ログのログは、エラーを見つける効果的な手段です。 Spring Boot アプリケーションにはログ フレームワーク logback が付属しており、これを通じてエラー ログを記録できます。 logback.xml ファイルでは、ログの出力形式、ログ ファイルの保存パスなどを構成できます。

サンプル コード:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/springbootdemo.log</file>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>logs/springbootdemo.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>30</maxHistory>
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
    </appender>
 
    <logger name="com.yourpackage" level="INFO"/>
 
    <root level="INFO">
        <appender-ref ref="fileAppender"/>
    </root>
</configuration>

上記のコードでは、指定されたファイルにログを出力するために fileAppender という名前のアペンダーを追加しました。このうち、rollingPolicy はファイル ローリング ポリシーの構成に使用され、maxFileSize は 1 つのログ ファイルのサイズを設定し、maxHistory はログ ファイルの保存日数を設定し、totalSizeCap はログ ファイルの合計サイズを設定します。

結論

Spring Boot アプリケーションでは、例外とエラーの処理は非常に重要な部分です。適切な例外のキャッチと処理、デバッグ スキルとログ記録を通じて、プログラムの安定性と信頼性を確保し、それによってユーザーにより良いサービスを提供できます。

上記は、Spring Boot アプリケーションで例外やエラーに対処する方法に関する基本的なヒントと方法です。

以上がSpring Boot アプリケーションで例外とエラーを処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。