ShardingSphere 통합을 시작할 수 없는 문제 해결

배경

프로젝트에 ShardingSphere가 통합되어 있는데 통합 후 시작할 수 없음을 확인하고 오류 메시지는 다음과 같습니다.

이미지.png

해결하다

오류의 근본 원인은 다음과 같습니다. Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.apache.shardingsphere.infra.config.mode.ModeConfiguration' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} 일반적인 org.springframework.beans.factory.NoSuchBeanDefinitionException문제: 보다 구체적으로 말하면 Spring에서 찾을 수 org.apache.shardingsphere.infra.config.mode.ModeConfiguration없으므로 먼저 이 클래스가 프로젝트에 포함되어 있는지 확인하십시오.

이미지.png

  1. 분명히 이 클래스는 프로젝트에 존재하지만 오히려 이상하다. 최종 수정된 클래스인데 어노테이션이 없다. Spring에서 보고한 오류는 autowire 중에 클래스를 찾을 수 없다는 것이므로, 의심된다. 주석이 없기 때문에 발생합니다.

  2. mvn 명령을 실행하여 종속성 분석

mvn dependency:tree > dependency.txt
复制代码

종속성 결과 분석: 종속성은 공통 프로젝트의 종속성입니다. 공통 프로젝트의 종속성을 봅니다.

이미지.png여기서 shardingsphere-infra-common의 종속성을 배제하고 또 다른 종속성을 도입한다. 이 새 종속성이 자체 빌드 버전인지 확인한 후. 그런 다음 다음 단계는 이 프로젝트의 코드를 살펴보는 것입니다.

  1. 웨어하우스에서 코드를 복제합니다. shardingsphere에는 많은 코드가 있습니다. 여기서는 공통에 중점을 둡니다. 다음 maven 명령을 실행하여 지정된 하위 모듈을 빌드합니다.
mvn install -pl shardingsphere-infra -am
复制代码

여기서 pl 다음에 지정된 하위 모듈이 오고 -am은 나열된 모듈을 빌드하는 지정된 모듈을 나타냅니다.

  1. 아이디어 서브모듈을 사용하여 ModeConfiguration주석을 추가하려는 시도는 직접적으로 실패하므로 소스 코드에 주석을 추가하여 수행해서는 안 되지만 실제 실행 프로세스에서 이 구성 클래스가 필요한 경우 이 객체를 생성할 장소가 있어야 하고, 콩으로 용기에 주입됩니다.

  2. 에서 이 클래스의 삽입을 보았습니다 ShardingSphereAutoConfiguration. 코드는 다음과 같습니다.

@Bean
public ModeConfiguration modeConfiguration() {
    return null == this.props.getMode() ? null : (new ModeConfigurationYamlSwapper()).swapToObject(this.props.getMode());
}
复制代码

분명히 속성에 모드 구성이 있어야 하며 모드 속성을 기반으로 ModeConfiguration을 생성해야 합니다.

  1. ModeConfiguration이 지원하는 유형을 확인해야 합니다. 자세한 내용은 샤딩 모드 를 참조하세요.

  2. 최종 솔루션이 구성 파일에 추가되었습니다.

spring.shardingsphere.mode.type=Memory
复制代码

요약

일반적인 오류의 경우 NoSuchBeanDefinitionException가장 중요한 것은 오류를 보고하는 클래스가 생성되었는지 확인하는 것이며, 생성되지 않은 경우에는 구체적인 원인을 찾아 대상을 수정해야 합니다.

추천

출처juejin.im/post/7086478069413724167