SpringBoot 인쇄 시작 시 이상 스 택 정보 상세 설명
6607 단어 SpringBoot이상 스 택
FailureAnalyzer
SpringBoot 는 이상 분석 인 터 페 이 스 를 시작 하 는 Failure Analyzer 를 제공 합 니 다.이 인 터 페 이 스 는 org.springframework.boot.diagnosticspackage 에 있 습 니 다.
내부 에서 하나의 분석 방법 만 제공 하고 소스 코드 는 다음 과 같다.
@FunctionalInterface
public interface FailureAnalyzer {
/**
* Returns an analysis of the given {@code failure}, or {@code null} if no analysis
* was possible.
* @param failure the failure
* @return the analysis or {@code null}
*/
FailureAnalysis analyze(Throwable failure);
}
이 인 터 페 이 스 는 만 나 는 이상 대상 인 스 턴 스 Throwable failure 를 실현 클래스 에 전달 하고 클래스 를 사용자 정의 로 처리 합 니 다.AbstractFailureAnalyzer
AbstractFailureAnalyzer 는 FailureAnalyzer 의 기초 로 추상 류 를 실현 하고 FailureAnalyzer 가 정의 하 는 analyzer(Throwable failure)방법 을 실현 하 며 이상 유형 을 지정 하 는 추상 적 인 방법 analyzer(Throwable rootFailure,T cause)를 제공 합 니 다.소스 코드 는 다음 과 같 습 니 다.
public abstract class AbstractFailureAnalyzer<T extends Throwable> implements FailureAnalyzer {
@Override
public FailureAnalysis analyze(Throwable failure) {
T cause = findCause(failure, getCauseType());
if (cause != null) {
return analyze(failure, cause);
}
return null;
}
/**
* Returns an analysis of the given {@code rootFailure}, or {@code null} if no
* analysis was possible.
* @param rootFailure the root failure passed to the analyzer
* @param cause the actual found cause
* @return the analysis or {@code null}
*/
protected abstract FailureAnalysis analyze(Throwable rootFailure, T cause);
/**
* Return the cause type being handled by the analyzer. By default the class generic
* is used.
* @return the cause type
*/
@SuppressWarnings("unchecked")
protected Class<? extends T> getCauseType() {
return (Class<? extends T>) ResolvableType.forClass(AbstractFailureAnalyzer.class, getClass()).resolveGeneric();
}
@SuppressWarnings("unchecked")
protected final <E extends Throwable> E findCause(Throwable failure, Class<E> type) {
while (failure != null) {
if (type.isInstance(failure)) {
return (E) failure;
}
failure = failure.getCause();
}
return null;
}
}
AbstractFailure Analyzer 소스 코드 를 통 해 알 수 있 듯 이 Failure Analyzer 의 인터페이스 방법 에서 특수 처 리 를 했 습 니 다.getCause Type()방법 에 따라 현재 클래스 정의 의 첫 번 째 범 형 유형,즉 우리 가 분석 해 야 할 지정 이상 유형 을 얻 었 습 니 다.범 형 이상 유형 을 가 져 온 후 방법 findCause 에 따라 Throwable 이 범 형 이상 유형 과 일치 하 는 지 판단 하고 일치 하면 SpringBoot 에 직접 등록 처리 합 니 다.
SpringBoot 가 제공 하 는 분석 실현
SpringBoot 내 부 는 AbstractFailure Analyzer 추상 류 를 실현 함으로써 일련의 목적 성 이상 유형의 시작 분석 을 정의 했다.다음 그림 과 같다.
지정 이상 분석
SpringBoot 내부 에서 제공 하 는 작 동 이상 분석 은 모두 구체 적 인 이상 유형 을 지정 하여 이 루어 진 것 입 니 다.가장 흔히 볼 수 있 는 오 류 는 포트 번호 가 점용 되 는 것 입 니 다(PortInUseException).SpringBoot 내부 에서 이 이상 한 작 동 분석 을 제공 하지만 우 리 는 이 이상 분석 을 대체 할 수 있 습 니 다.우 리 는 PortInUseException 이상 의 AbstractFailure Analyzer 를 만 들 고 클래스 를 SpringBoot 에 등록 하면 다음 과 같은 사용자 정의 가 가능 합 니 다.
/**
* {@link PortInUseException}
*
* @author
*/
public class PortInUseFailureAnalyzer extends AbstractFailureAnalyzer<PortInUseException> {
/**
* logger instance
*/
static Logger logger = LoggerFactory.getLogger(PortInUseFailureAnalyzer.class);
@Override
protected FailureAnalysis analyze(Throwable rootFailure, PortInUseException cause) {
logger.error(" 。", cause);
return new FailureAnalysis(" :" + cause.getPort() + " ", "PortInUseException", rootFailure);
}
}
등록 시작 이상 분석위 에서 저 희 는 지정 한 이상 시작 분석 만 작 성 했 습 니 다.다음 에 효력 을 발생 시 켜 야 합 니 다.이 효력 발생 방식 은 사용자 정의 SpringBoot Starter AutoConfiguration 과 유사 합 니 다.저 희 는 META-INF/spring.factories 파일 에서 정 의 를 내 려 야 합 니 다.다음 과 같 습 니 다.
org.springframework.boot.diagnostics.FailureAnalyzer=\
org.minbox.chapter.springboot.failure.analyzer.PortInUseFailureAnalyzer
그럼 우 리 는 왜 이런 방식 으로 정 의 를 내 려 야 합 니까?프로젝트 시작 에 발생 하 는 이상 순 서 는 확인 되 지 않 습 니 다.Spring IOC 가 초기 화 되 기 전에 이상 이 발생 했 을 가능성 이 높 습 니 다.@Component 주해 형식 으로 적용 할 수 없 기 때문에 SpringBoot 는 spring.factories 설정 파일 을 통 해 정 의 를 제공 합 니 다.
이상 분석 상속 관계 시작
사용자 정의 실행 이상 은 일반적으로 Runtime Exception 에서 계승 합 니 다.Runtime Exception 의 이상 시작 분석 인 스 턴 스 를 정의 하면 어떤 효과 가 있 습 니까?
/**
* {@link RuntimeException}
*
* @author
*/
public class ProjectBootUnifiedFailureAnalyzer extends AbstractFailureAnalyzer<RuntimeException> {
/**
* logger instance
*/
static Logger logger = LoggerFactory.getLogger(ProjectBootUnifiedFailureAnalyzer.class);
@Override
protected FailureAnalysis analyze(Throwable rootFailure, RuntimeException cause) {
logger.error(" ", cause);
return new FailureAnalysis(cause.getMessage(), "error", rootFailure);
}
}
이 클래스 도 spring.factories 파일 에 함께 등록 합 니 다.다음 과 같 습 니 다.
org.springframework.boot.diagnostics.FailureAnalyzer=\
org.minbox.chapter.springboot.failure.analyzer.PortInUseFailureAnalyzer,\
org.minbox.chapter.springboot.failure.analyzer.ProjectBootUnifiedFailureAnalyzer
프로젝트 를 실행 하고 포트 번호 가 이상 하 게 점용 되 었 음 을 테스트 하면 ProjectBootUnified Failure Analyzer 의 analyzer 방법 을 실행 하지 않 고 PortInUseFailure Analyzer 클래스 의 방법 을 계속 실행 한 것 을 발견 할 수 있 습 니 다.그러면 우 리 는 PortInUseFailureAnalyzer 라 는 시작 분석 을 spring.factories 파일 에서 잠시 삭제 하고 프로젝트 를 실행 합 니 다.이 때 는 ProjectBootUnified FailureAnalyzer 류 의 분석 방법 을 실행 하 는 것 을 발견 할 수 있 습 니 다.
총결산
이 장 에서 우 리 는 SpringBoot 가 제공 하 는 작 동 이상 분석 인터페이스 와 기본 추상 적 인 실현 류 의 운영 원 리 를 알 게 되 었 고 이상 분석 을 시작 하면 범 형 이상 류 의 상하 상속 관 계 를 분석 하고 이상 서브 류 의 작 동 분석 은 이상 부모 류 의 작 동 분석 을 덮어 버 릴 것 이다.모든 이상 한 시작 분석 을 포함 하고 싶다 면 Exception 을 AbstractFailure Analyzer 의 일반적인 매개 변수 로 사용 해 보 세 요.
이상 은 이번에 소개 한 모든 지식 포인트 내용 입 니 다.저희 가 정리 한 내용 이 여러분 에 게 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Java・SpringBoot・Thymeleaf】 에러 메세지를 구현(SpringBoot 어플리케이션 실천편 3)로그인하여 사용자 목록을 표시하는 응용 프로그램을 만들고, Spring에서의 개발에 대해 공부하겠습니다 🌟 마지막 데이터 바인딩에 계속 바인딩 실패 시 오류 메시지를 구현합니다. 마지막 기사🌟 src/main/res...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.