Error al crear un bean con el nombre 'com.alibaba.dubbo.spring.boot.DubboProviderAutoConfiguration'

El registro de dubbo+zookeeper no pudo iniciarse Error al crear el bean con el nombre 'com.alibaba.dubbo.spring.boot.DubboProviderAutoConfiguration'

La solución inicial es la siguiente, pero habrá más errores en el futuro. Todo proviene de problemas de versión y nunca se ha iniciado exitosamente. De un error a otro, se recomienda leer directamente la solución de la última versión.

Los principales videos de dubbo para principiantes son la combinación de dubbo+zookeeper, pero sigo empezando a reportar errores, la siguiente es mi triste historia de sangre y lágrimas.

reportar error

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.alibaba.dubbo.spring.boot.DubboProviderAutoConfiguration': Invocation of init method failed; nested exception is java.lang.ExceptionInInitializerError
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160) ~[spring-beans-5.3.21.jar:5.3.21]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440) ~[spring-beans-5.3.21.jar:5.3.21]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796) ~[spring-beans-5.3.21.jar:5.3.21]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) ~[spring-beans-5.3.21.jar:5.3.21]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.21.jar:5.3.21]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.21.jar:5.3.21]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.21.jar:5.3.21]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.21.jar:5.3.21]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.21.jar:5.3.21]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) ~[spring-beans-5.3.21.jar:5.3.21]
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.21.jar:5.3.21]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.21.jar:5.3.21]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) ~[spring-boot-2.7.1.jar:2.7.1]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) ~[spring-boot-2.7.1.jar:2.7.1]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[spring-boot-2.7.1.jar:2.7.1]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-2.7.1.jar:2.7.1]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-2.7.1.jar:2.7.1]
	at com.example.provider.DubboProviderApplication.main(DubboProviderApplication.java:15) ~[classes/:na]
Caused by: java.lang.ExceptionInInitializerError: null
	at com.alibaba.dubbo.spring.boot.DubboProviderAutoConfiguration.initProviderBean(DubboProviderAutoConfiguration.java:52) ~[dubbo-spring-boot-starter-2.0.0.jar:na]
	at com.alibaba.dubbo.spring.boot.DubboProviderAutoConfiguration.init(DubboProviderAutoConfiguration.java:45) ~[dubbo-spring-boot-starter-2.0.0.jar:na]
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:577) ~[na:na]
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) ~[spring-beans-5.3.21.jar:5.3.21]
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) ~[spring-beans-5.3.21.jar:5.3.21]
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) ~[spring-beans-5.3.21.jar:5.3.21]
	... 17 common frames omitted
Caused by: java.lang.IllegalStateException: fail to create adaptive instance: java.lang.IllegalStateException: Can not create adaptive extension interface com.alibaba.dubbo.rpc.Protocol, cause: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @6f96c77
	at com.alibaba.dubbo.common.extension.ExtensionLoader.getAdaptiveExtension(ExtensionLoader.java:447) ~[dubbo-2.6.0.jar:2.6.0]
	at com.alibaba.dubbo.config.ServiceConfig.<clinit>(ServiceConfig.java:74) ~[dubbo-2.6.0.jar:2.6.0]
	... 24 common frames omitted
Caused by: java.lang.IllegalStateException: Can not create adaptive extension interface com.alibaba.dubbo.rpc.Protocol, cause: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @6f96c77
	at com.alibaba.dubbo.common.extension.ExtensionLoader.createAdaptiveExtension(ExtensionLoader.java:710) ~[dubbo-2.6.0.jar:2.6.0]
	at com.alibaba.dubbo.common.extension.ExtensionLoader.getAdaptiveExtension(ExtensionLoader.java:443) ~[dubbo-2.6.0.jar:2.6.0]
	... 25 common frames omitted
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @6f96c77
	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354) ~[na:na]
	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) ~[na:na]
	at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:200) ~[na:na]
	at java.base/java.lang.reflect.Method.setAccessible(Method.java:194) ~[na:na]
	at javassist.ClassPool.toClass2(ClassPool.java:1181) ~[javassist-3.20.0-GA.jar:na]
	at javassist.ClassPool.toClass(ClassPool.java:1164) ~[javassist-3.20.0-GA.jar:na]
	at javassist.CtClass.toClass(CtClass.java:1305) ~[javassist-3.20.0-GA.jar:na]
	at com.alibaba.dubbo.common.compiler.support.JavassistCompiler.doCompile(JavassistCompiler.java:122) ~[dubbo-2.6.0.jar:2.6.0]
	at com.alibaba.dubbo.common.compiler.support.AbstractCompiler.compile(AbstractCompiler.java:58) ~[dubbo-2.6.0.jar:2.6.0]
	at com.alibaba.dubbo.common.compiler.support.AdaptiveCompiler.compile(AdaptiveCompiler.java:45) ~[dubbo-2.6.0.jar:2.6.0]
	at com.alibaba.dubbo.common.extension.ExtensionLoader.createAdaptiveExtensionClass(ExtensionLoader.java:726) ~[dubbo-2.6.0.jar:2.6.0]
	at com.alibaba.dubbo.common.extension.ExtensionLoader.getAdaptiveExtensionClass(ExtensionLoader.java:719) ~[dubbo-2.6.0.jar:2.6.0]
	at com.alibaba.dubbo.common.extension.ExtensionLoader.createAdaptiveExtension(ExtensionLoader.java:708) ~[dubbo-2.6.0.jar:2.6.0]
	... 26 common frames omitted


Process finished with exit code 1

Causa especulación

  1. Al principio, descargué zookeeper en la máquina virtual. Al principio, me preguntaba si era porque la conexión de la dirección de la máquina virtual falló o porque mi proceso de descarga e instalación de zookeeper era incorrecto. Sin embargo, después de descargar zookeeper localmente en Windows, todavía fallido.
  2. Sospecho que las versiones de spring-dubbo y springboot corresponden entre sí. Encontré esto en Internet, pero parece inútil después de probarlo. Aunque lo inicié con éxito al principio porque de repente tuvo éxito después de cambiar la versión, pero fue Todavía tuve éxito cuando lo volví a cambiar (la versión oficial corresponde a Puede consultar aquí (haga clic) , aunque creo que es inútil)
  3. Finalmente, se descubrió que era
    @SpringBootApplication //Habilitar la configuración de anotaciones de Spring
    @EnableDubboConfiguration //Habilitar
    las anotaciones de configuración de dubbo tienen conflictos. Supongo que ambos tienen algunas funciones comunes que causan ambigüedad en el proyecto, y también encontré una anotación @EnableAutoConfiguration es la mismo Se puede realizar la función correspondiente. Parece que @SpringBootApplication contiene
    la solución @EnableAutoConfiguration: use una de las anotaciones @EnableAutoConfiguration o @SpringBootApplication en la clase de inicio, en lugar de las dos primeras

Parece muy corto, parece que se soluciona de una vez, pero después de tres o cuatro días de irritabilidad, se llena de lágrimas amargas.

Finalmente, pegue mi código
1. La estructura general
inserte la descripción de la imagen aquí
común
solo escribe un método, pom.xml no necesita escribir ninguna dependencia
inserte la descripción de la imagen aquí

proveedor
inserte la descripción de la imagen aquí
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.1</version>
<!--        <version>2.2.5.RELEASE</version>-->
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>dubbo-provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-provider</name>
    <description>dubbo-provider</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>

        <!--Dubbo集成spring boot框架起步依赖-->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
            <optional>true</optional>
        </dependency>
        <!--注册中心-->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.11</version>
            <optional>true</optional>
        </dependency>
        <!--接口工程-->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>dubbo-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

clase de inicio de aplicación

package com.example.provider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;

@EnableAutoConfiguration
public class DubboProviderApplication {
    
    

    public static void main(String[] args) {
    
    
        SpringApplication.run(DubboProviderApplication.class, args);
    }

}

archivo de configuración application.properties

#设置内嵌tomcat端口号
server.port=8081
#设置上下文根
server.servlet.context-path=/
#设置dubbo配置
spring.dubbo.application.name=dubbo-provider

#确定当前工程是一个服务提供者
spring.dubbo.server=true
#设置注册中心
spring.dubbo.registry=zookeeper://127.0.0.1:2181

spring.dubbo.protocol.port=-1	#这个不知道有什么用,找错的时候copy的,应该可以没有

clase de implementación de interfaz

package com.example.provider.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.example.common.service.StudentService;
import org.springframework.stereotype.Component;

@Component
@Service(interfaceClass = StudentService.class,version = "1.0.0",timeout = 15000)
//要引用com.alibaba.dubbo.config.annotation.Service的service注解
public class StudentServiceImpl implements StudentService {
    
    
    @Override
    public Integer queryAllStudentCount() {
    
    
        return 11110;
    }
}

La dependencia que el consumidor
inserte la descripción de la imagen aquí
necesita agregar en pom.xml es la misma que la del proveedor.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>dubbo-consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-consumer</name>
    <description>dubbo-consumer</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--Dubbo集成spring boot框架起步依赖-->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <!--注册中心-->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.11</version>
        </dependency>
        <!--接口工程-->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>dubbo-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

archivo de configuración application.properties

#设置内嵌tomcat端口号
server.port=8082
#设置上下文根
server.servlet.context-path=/
#设置dubbo配置

spring.dubbo.application.name=dubbo-consumer
#设置注册中心
spring.dubbo.registry=zookeeper://127.0.0.1:2181

clase de inicio de aplicación

@EnableAutoConfiguration
public class DubboConsumerApplication {
    
    

    public static void main(String[] args) {
    
    
        SpringApplication.run(DubboConsumerApplication.class, args);
    }
}

Controlador

package com.example.consumer.web;

import com.alibaba.dubbo.config.annotation.Reference;
import com.example.common.service.StudentService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class StudentController {
    
    

    @Reference(interfaceClass = StudentService.class,version = "1.0.0",check = false)
    private StudentService studentService;

    @RequestMapping(value = "/student/count")
    public @ResponseBody Object studentCount(){
    
    

        Integer allStudentCount = studentService.queryAllStudentCount();
        return "学生总人数为:" + allStudentCount;
    }
}

Lo anterior es mi enfoque inicial, no se recomienda adoptarlo
------------------------------------- --------------Línea límite--------------------------------- ------------------------

El camino real: elige la versión correcta

jdk8 (jdk1.8) (énfasis)
La versión encontrada por Springboot es algo limitada, pero la nueva versión 2.7.2 que uso parece estar bien. Utilizo
Dubbo de Apache y las dependencias de integración de Spring relacionadas. Al principio usé varios informes de Alibaba. error

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>dubbo-provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-provider</name>
    <description>dubbo-provider</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.3.0</version>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.11</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo </groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.2</version>
        </dependency>
        <!--我的接口模块-->
        <dependency>
            <groupId>com.example.common</groupId>
            <artifactId>dubbo-common</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

archivo de configuración del proveedor application.properties

server.port=8081

spring.application.name=dubbo-provider
dubbo.application.id=dubbo-provider
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.application.name=dubbo-provider
dubbo.consumer.timeout=100000
dubbo.protocol.name=dubbo
dubbo.protocol.port=-1
#确定当前工程是一个服务提供者
spring.dubbo.server=true

archivo de configuración del consumidor application.properties

server.port=8082

spring.application.name=dubbo-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.application.name=dubbo-consumer
dubbo.application.id=dubbo-consumer
dubbo.consumer.timeout=100000
dubbo.protocol.name=dubbo
dubbo.protocol.port=-1

Proveedor:
use la anotación @service de Apache en la clase de implementación de la interfaz.
inserte la descripción de la imagen aquí
Agregue el dubbo de @EnableBubbo para comenzar a escanear en la clase de inicio .
inserte la descripción de la imagen aquí
Consumidor:
use la anotación @Reference de Apache bajo control y use la interfaz para indicar la clase de la interfaz. La verificación también debe establecerse en falso.
inserte la descripción de la imagen aquí
La clase de inicio también debe agregarse @EnableDubbo
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_45887317/article/details/125838187
Recomendado
Clasificación