Nacos启动报No DataSource set的问题

最近使用nacos-server 2.0.3版本进行部署时,docker镜像启动后就报了下面的异常信息:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'communicationController' defined in URL [jar:file:/usr/local/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-config-2.0.1.jar!/com/alibaba/nacos/config/server/controller/CommunicationController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dumpService': Invocation of init method failed; nested exception is java.lang.RuntimeException: Nacos Server did not start because dumpservice bean construction failure :
No DataSource set
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:769)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:218)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1308)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1154)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
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:846)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:863)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
at com.alibaba.nacos.Nacos.main(Nacos.java:33)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.PropertiesLauncher.main(PropertiesLauncher.java:593)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dumpService': Invocation of init method failed; nested exception is java.lang.RuntimeException: Nacos Server did not start because dumpservice bean construction failure :
No DataSource set
网上查了很多资料都没有解决,错就处在nacos给出的异常信息的迷惑性,笔者出现这个问题因为nacos-server连接外部的mysql服务器失败导致的,也就是说出现这个问题的根源在于DataSource数据源创建失败了,之所以访问不到外部的mysql服务,是因为docker容器的ip地址与mysql服务器ip地址网段冲突导致的,通过人为设置network网段的方式解决了这个问题。
需要注意的是nacos-server docker镜像内部的mysql配置如下所示:
#db.num=${MYSQL_DATABASE_NUM:1}
#db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true}
#db.url.1=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true}
#db.user=${MYSQL_SERVICE_USER}
#db.password=${MYSQL_SERVICE_PASSWORD}
所以如果mysql服务器是MySQL8.0版本的话需要设置MYSQL_SERVICE_DB_PARAM需要指定serverTimezone,比如
serverTimezone=Asia/Shanghai
完整的MYSQL_SERVICE_DB_PARAM配置如下所示:
characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
Nacos的主要优势如下:
-
动态服务发现能力强:Nacos支持多种服务发现方式和协议,如HTTP、TCP、UDP等,并且可以根据业务需求自定义服务发现的规则,从而让服务间的调用更加便捷和高效。
-
负载均衡功能强大:Nacos提供了多种负载均衡算法和故障恢复机制,如轮询、随机、最少活跃数等,同时还可以根据业务需求自定义负载均衡策略,确保系统在高并发环境下具有更好的稳定性和可用性。
-
动态配置管理方便:Nacos支持动态配置管理,可以方便地对配置进行修改和更新,而且支持基于命名空间、配置项和分组的管理,让配置的管理更加灵活和方便。
-
多数据中心支持:Nacos支持多数据中心部署,可以实现数据和服务的容灾备份,提高系统的可靠性和可用性。
-
健康检查:Nacos提供对服务的实时的健康检查,阻止向不健康的主机或者服务实例发送请求。同时支持传输层(Ping/TCP)、应用层(HTTP、Mysql)的健康检查。
-
服务和元数据管理:Nacos允许开发者从微服务平台建设的视角来管理数据中心的所有服务和元数据。如服务的生命周期、静态依赖分析、服务的健康状态、服务的流量管理、路由和安全策略等。




更多推荐








所有评论(0)