背景
使用 docker compose
运行nacos服务,docker-compose文件如下:
services:
mysql:
image: mysql:${MYSQL_IMAGE_VERSION}
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${MY_PASSWD}
TZ: Asia/Shanghai
ports:
- "3306:3306"
volumes:
- ./ddl:/docker-entrypoint-initdb.d
- mysql_data:/var/lib/mysql
healthcheck:
test: [ "CMD", "mysqladmin" ,"ping", "-uroot", "-p${MYSQL_ROOT_PASSWORD}"]
interval: 5s
timeout: 10s
retries: 10
nacos:
image: nacos/nacos-server:${NACOS_VERSION}
environment:
PREFER_HOST_MODE: hostname
MODE: standalone
SPRING_DATASOURCE_PLATFORM: mysql
MYSQL_SERVICE_HOST: mysql
MYSQL_SERVICE_DB_NAME: nacos
MYSQL_SERVICE_PORT: 3306
MYSQL_SERVICE_USER: root
MYSQL_SERVICE_PASSWORD: ${MY_PASSWD}
MYSQL_SERVICE_DB_PARAM: ${MYSQL_SERVICE_DB_PARAM}
#开启鉴权
NACOS_AUTH_ENABLE: true
NACOS_AUTH_IDENTITY_KEY: xxxx
NACOS_AUTH_IDENTITY_VALUE: xxxxxx
NACOS_AUTH_TOKEN: SecretKey121312312321312312321312321465464678658768967968775656766
ports:
- "8848:8848"
- "9848:9848"
depends_on:
mysql:
condition: service_healthy
restart: always
volumes:
mysql_data:
driver: local
错误信息:
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'asyncNotifyService': Unsatisfied dependency expressed through field 'dumpService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'externalDumpService': Invocation of init method failed; nested exception is ErrCode:500, ErrMsg:Nacos Server did not start because dumpservice bean construction failure :
nacos-1 | No DataSource set
nacos-1 | at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:660)
nacos-1 | at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)
nacos-1 | at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
nacos-1 | at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
nacos-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
nacos-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
nacos-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
nacos-1 | at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
nacos-1 | at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
nacos-1 | at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
nacos-1 | at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
nacos-1 | at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
nacos-1 | at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
nacos-1 | at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
nacos-1 | at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
nacos-1 | at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
nacos-1 | ... 27 common frames omitted
nacos-1 | Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'externalDumpService': Invocation of init method failed; nested exception is ErrCode:500, ErrMsg:Nacos Server did not start because dumpservice bean construction failure :
nacos-1 | No DataSource set
nacos-1 | at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160)
nacos-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440)
nacos-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796)
nacos-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
nacos-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
nacos-1 | at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
nacos-1 | at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
nacos-1 | at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
nacos-1 | at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
nacos-1 | at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
nacos-1 | at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
nacos-1 | at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
nacos-1 | at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657)
nacos-1 | ... 42 common frames omitted
nacos-1 | Caused by: com.alibaba.nacos.api.exception.NacosException: Nacos Server did not start because dumpservice bean construction failure :
nacos-1 | No DataSource set
nacos-1 | at com.alibaba.nacos.config.server.service.dump.DumpService.dumpOperate(DumpService.java:260)
nacos-1 | at com.alibaba.nacos.config.server.service.dump.ExternalDumpService.init(ExternalDumpService.java:61)
nacos-1 | at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
nacos-1 | at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
nacos-1 | at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
nacos-1 | at java.lang.reflect.Method.invoke(Method.java:498)
nacos-1 | at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389)
nacos-1 | at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333)
nacos-1 | at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157)
nacos-1 | ... 54 common frames omitted
nacos-1 | Caused by: java.lang.IllegalStateException: No DataSource set
nacos-1 | at org.springframework.util.Assert.state(Assert.java:76)
nacos-1 | at org.springframework.jdbc.support.JdbcAccessor.obtainDataSource(JdbcAccessor.java:86)
nacos-1 | at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:376)
nacos-1 | at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:465)
nacos-1 | at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:475)
nacos-1 | at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:508)
nacos-1 | at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:515)
nacos-1 | at com.alibaba.nacos.config.server.service.repository.extrnal.ExternalConfigInfoPersistServiceImpl.findConfigMaxId(ExternalConfigInfoPersistServiceImpl.java:632)
nacos-1 | at com.alibaba.nacos.config.server.service.dump.processor.DumpAllProcessor.process(DumpAllProcessor.java:51)
nacos-1 | at com.alibaba.nacos.config.server.service.dump.DumpService.dumpConfigInfo(DumpService.java:317)
nacos-1 | at com.alibaba.nacos.config.server.service.dump.DumpService.dumpOperate(DumpService.java:230)
nacos-1 | ... 62 common frames omitted
nacos-1 | 2024-11-01 15:28:01,950 WARN [ThreadPoolManager] Start destroying ThreadPool
nacos-1 |
nacos-1 | 2024-11-01 15:28:01,950 WARN [ThreadPoolManager] Destruction of the end
在此处吐槽一下nacos,就是当你mysql连不上时,抛出的错误日志基本上都长这样,你不知道究竟是mysql地址错误、数据库账号密码错误、或者别的其他的错误。真是让人血脉喷张,高血压都上来了,程序员头发已经很少了,请遵循programmers help programmers
简称:PHP
解决方案
经过几轮的排查,花了大半天时间,最终定位到问题:
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=10000&socketTimeout=3000&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai
改为:
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
甚至我都没看出到底是哪个参数没对,导致的这个问题,新配置是我从github取的。总之问题解决了。
使用nacos的每个人都有每个人的报应,但愿你遇到的问题和我一样。