apollo公共配置dubbo 报错 Invalid name=“org.apache.dubbo.config.ApplicationConfig#0“解决


Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-09-08 15:08:01.360 ERROR [nlp-adminweb-provider] [main] [] org.springframework.boot.SpringApplication - [org.springframework.boot.SpringApplication : reportFailure : 823] - Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'XXXXXAction': Injection of @DubboReference dependencies is failed; nested exception is java.lang.IllegalStateException: Invalid name="org.apache.dubbo.config.ApplicationConfig#0" contains illegal character, only digit, letter, '-', '_' or '.' is legal.
	at com.alibaba.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor.postProcessPropertyValues(AbstractAnnotationBeanPostProcessor.java:146)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1416)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:592)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:845)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:744)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:391)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:312)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1204)
	at com.uaf.nlp.AdminwebProviderApplication.main(AdminwebProviderApplication.java:36)
Caused by: java.lang.IllegalStateException: Invalid name="org.apache.dubbo.config.ApplicationConfig#0" contains illegal character, only digit, letter, '-', '_' or '.' is legal.
	at org.apache.dubbo.config.utils.ConfigValidationUtils.checkProperty(ConfigValidationUtils.java:588)
	at org.apache.dubbo.config.utils.ConfigValidationUtils.checkName(ConfigValidationUtils.java:546)
	at org.apache.dubbo.config.utils.ConfigValidationUtils.validateApplicationConfig(ConfigValidationUtils.java:386)
	at org.apache.dubbo.config.bootstrap.DubboBootstrap.checkGlobalConfigs(DubboBootstrap.java:528)
	at org.apache.dubbo.config.bootstrap.DubboBootstrap.initialize(DubboBootstrap.java:515)
	at org.apache.dubbo.config.bootstrap.DubboBootstrap.init(DubboBootstrap.java:496)
	at org.apache.dubbo.config.ReferenceConfig.init(ReferenceConfig.java:190)
	at org.apache.dubbo.config.ReferenceConfig.get(ReferenceConfig.java:158)
	at org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.getOrCreateProxy(ReferenceAnnotationBeanPostProcessor.java:280)
	at org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.doGetInjectedBean(ReferenceAnnotationBeanPostProcessor.java:149)
	at com.alibaba.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor.getInjectedObject(AbstractAnnotationBeanPostProcessor.java:359)
	at com.alibaba.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor$AnnotatedFieldElement.inject(AbstractAnnotationBeanPostProcessor.java:539)
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90)
	at com.alibaba.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor.postProcessPropertyValues(AbstractAnnotationBeanPostProcessor.java:142)
	... 17 common frames omitted

apollo公共配置信息

apollo公共配置信息

dubbo.registry.protocol = zookeeper
dubbo.registry.address = 127.0.0.1:2181
dubbo.protocol.name = dubbo
dubbo.protocol.port = 20885
dubbo.provider.timeout = 60000
dubbo.provider.threadpool = fixed
dubbo.provider.threads = 100
dubbo.provider.accepts = 1000
dubbo.provider.filter = braveProviderFilter #自定义组件
dubbo.provider.retries = 0
dubbo.consumer.filter = braveConsumerFilter #自定义组件
dubbo.scan.base-packages = com.xxx.service
dubbo.consumer.check = false

公共配置信息 是采用的默认加载 ,但是有个问题是我们有很多的项目,都用到dubbo注册和扫描,
但是注册的端口好和扫描的包都不一样,也就是说我们公共配置信息里面的dubbo.protocol.port = 20885 和 dubbo.scan.base-packages = com.xxx.service 在每个项目中都会发生改变,我们怎么处理呢。

解决:
在公共配置的地方 ,加一个覆盖配置信息,这个覆盖配置信息跟随各个项目本性而定,不同的项目使用不同的覆盖信息:
apollo公共配置信息加私有覆盖信息

dubbo.scan.base-packages = com.xxx.xxx.service #dubbo扫描的路径
dubbo.protocol.port = 20888 #项目注册的端口

添加完成之后 我们就可以再项目的application.yml中配置相应的信息
application.yml配置信息:

app:
  id: nlp-adminweb-provider    #从服务端获取配置的唯一标识
apollo:
  cacheDir: /usr/local/nlp/config-data        #本地缓存路径
  bootstrap:
    enabled: true
    namespaces: application,common.dubbo-client  #配置项集合 application私有 common.dubbo-client公共
spring:
  main:
    allow-bean-definition-overriding: true     #解决Spring bean id重复覆盖的问题
  profiles:
    include:
      - redis               # 加载microservice-redis服务配置(使用了redis则需配置)

私有配置信息:
在这里插入图片描述

server.port = 8903
server.servlet.context-path = /adminweb
spring.application.name = nlp-adminweb-provider
dubbo.application.id = nlp-adminweb-provider

**注意:在我们的私有配置信息中 ,多出了一个本地没有配置信息dubbo.application.id = nlp-adminweb-provider **
为什么会多出这个属性呢?
原因是因为在加载公共配置信息的时候,dubbo的特殊公共配置和私有配置在一起,项目在启动的时候,没有办法找到私有的属性,所有在我们私有的配置中给dubbo加上这上一个ID,这样就不会导致项目在启动的时候找不到name属性

这样就完美决绝了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`org.apache.dubbo.configcenter.support.apollo.ApolloDynamicConfiguration`是Dubbo框架提供的一个Apollo配置中心的动态配置实现类。 在Dubbo中,动态配置是指可以在运行时实时获取配置,并且支持配置变更的功能。通过使用ApolloDynamicConfiguration,Dubbo服务可以集成Apollo配置中心,实现动态配置的功能。 使用ApolloDynamicConfiguration需要按照以下步骤进行配置: 1. 引入Apollo客户端依赖:在Dubbo项目中引入Apollo客户端的相关依赖,可以通过Maven等构建工具进行引入。 2. 配置Apollo相关信息:在Dubbo配置文件(例如dubbo.properties)中添加Apollo配置项,包括Apollo配置中心的地址、命名空间、App ID等。例如: ``` ## Apollo配置中心地址 apollo.meta=http://localhost:8080 ## Apollo的命名空间 apollo.namespace=application ## Apollo的App ID apollo.app.id=dubbo-app ``` 3. 创建ApolloDynamicConfiguration实例:在Dubbo配置文件(例如dubbo.xml)中配置ApolloDynamicConfiguration实例。例如: ```xml <dubbo:config-center address="apollo" protocol="apollo" /> <dubbo:application name="dubbo-app" /> <dubbo:registry address="zookeeper://localhost:2181" /> <dubbo:protocol name="dubbo" port="20880" /> <dubbo:configurator address="zookeeper://localhost:2181" /> <dubbo:provider /> <dubbo:consumer /> ``` 通过以上配置Dubbo服务将使用ApolloDynamicConfiguration作为配置中心,并且从Apollo配置中心获取动态配置。当Apollo配置中心的配置发生变化时,Dubbo服务会自动获取最新的配置并应用到运行中的服务中。 注意,使用ApolloDynamicConfiguration需要保证Apollo客户端和相关依赖已经正确引入,并且Apollo配置中心中的配置项与Dubbo配置项一一对应。这样,在Apollo配置变更时,Dubbo服务才能正确地获取并应用最新的配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值