最近接受的项目是使用Java开发的,开发过程中需要用到nacos,但是我不熟悉Java环境,也不熟悉nacos。
所以每次电脑开关机,都需要运行nacos,然后我就需要去找nacos的安装路径,然后找到bin文件,使用”startup.cmd -m standalone”命令运行启动,觉得很麻烦,于是便想着用bat文件运行,说干就敢。
但是我高估了现在的AI,当我有这个想法去问AI的时候,chatGPT4o还没有发布,所以我当时问了chatGPT3.5,然后......
首先是第一版:
@echo off
set NACOS_HOME=D:\Software\nacos
cd /d %NACOS_HOME%\bin
call startup.cmd
这个可以启动,但是命令行弹出框很快就结束了,也就是nacos只启动了一段时间,并没有长久运行,于是ChatGPT给了第二版:
@echo off
set NACOS_HOME=D:\Software\nacos
cd /d %NACOS_HOME%\bin
call startup.cmd
pause
这一版的结果是,运行一段时间后,显示按任意键继续,那也就是和第一版一样,也只运行的一段实际,继续问ChatGPT,给出了第三版:
@echo off
set NACOS_HOME=D:\Software\nacos
cd /d %NACOS_HOME%\bin
start cmd /k call startup.cmd
这一版的缺陷是运行了命令行弹出框,但是很快就被杀掉了,导致nacos还是没有启动起来,然后是第四版
@echo off
set NACOS_HOME=D:\Software\nacos
cd /d %NACOS_HOME%\bin
start /b call startup.cmd
这一版有一个验证缺陷,导致nacos运行的时候直接报错
命令行
"nacos is starting with cluster"
,--.
,--.'|
,--,: : | Nacos 2.3.2
,--.'
| ' : ,---. Running in cluster mode, All function modules
| : : | | ' ,'\ .--.--. Port: 8848
: | \ | : ,--.--. ,---. / / | / / ' Pid: 18208
| : ' '; | / \ / . ; ,. :| : /./ Console: http://192.168.0.104:8848/nacos/index.html ' ' ;. ;.--. .-. | / / '' | |: :| : ;_ | | | \ | \__\/: . .. ' / ' | .; : \ \
. https://nacos.io
' : | ; .' ," .--.; |' ; :__| : | ----. \ | | '
--' / / ,. |' | '.'|\ \ / / /--' / ' : | ; : .' \ : :
----' '--'. /
; |.' | , .-./\ \ / --'---' '---'
-----'
----'
2024-05-07 10:25:09,301 INFO The server IP list of Nacos is []
2024-05-07 10:25:10,310 INFO Nacos is starting…
2024-05-07 10:25:11,320 INFO Nacos is starting…
2024-05-07 10:25:12,327 INFO Nacos is starting…
2024-05-07 10:25:12,589 INFO Nacos Log files: D:\Software\nacos\logs
2024-05-07 10:25:12,589 INFO Nacos Log files: D:\Software\nacos\conf
2024-05-07 10:25:12,589 INFO Nacos Log files: D:\Software\nacos\data
2024-05-07 10:25:12,591 ERROR Startup errors :
org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:165)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:585)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147)
Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:142)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'distroFilterRegistration' defined in class path resource [com/alibaba/nacos/naming/web/NamingConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.web.servlet.FilterRegistrationBean]: Factory method 'distroFilterRegistration' threw exception; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'distroFilter': Unsatisfied dependency expressed through field 'distroMapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'distroMapper' defined in URL [jar:file:/D:/Software/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-naming-2.3.2.jar!/com/alibaba/nacos/naming/core/DistroMapper.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serverMemberManager' defined in URL [jar:file:/D:/Software/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-core-2.3.2.jar!/com/alibaba/nacos/core/cluster/ServerMemberManager.class]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.nacos.core.cluster.ServerMemberManager]: Constructor threw exception; nested exception is ErrCode:500, ErrMsg:jmenv.tbsite.net
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:481)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.web.servlet.FilterRegistrationBean]: Factory method 'distroFilterRegistration' threw exception; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'distroFilter': Unsatisfied dependency expressed through field 'distroMapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'distroMapper' defined in URL [jar:file:/D:/Software/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-naming-2.3.2.jar!/com/alibaba/nacos/naming/core/DistroMapper.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serverMemberManager' defined in URL [jar:file:/D:/Software/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-core-2.3.2.jar!/com/alibaba/nacos/core/cluster/ServerMemberManager.class]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.nacos.core.cluster.ServerMemberManager]: Constructor threw exception; nested exception is ErrCode:500, ErrMsg:jmenv.tbsite.net
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:648)
… 61 common frames omitted
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'distroFilter': Unsatisfied dependency expressed through field 'distroMapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'distroMapper' defined in URL [jar:file:/D:/Software/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-naming-2.3.2.jar!/com/alibaba/nacos/naming/core/DistroMapper.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serverMemberManager' defined in URL [jar:file:/D:/Software/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-core-2.3.2.jar!/com/alibaba/nacos/core/cluster/ServerMemberManager.class]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.nacos.core.cluster.ServerMemberManager]: Constructor threw exception; nested exception is ErrCode:500, ErrMsg:jmenv.tbsite.net
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:713)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:693)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'distroMapper' defined in URL [jar:file:/D:/Software/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-naming-2.3.2.jar!/com/alibaba/nacos/naming/core/DistroMapper.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serverMemberManager' defined in URL [jar:file:/D:/Software/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-core-2.3.2.jar!/com/alibaba/nacos/core/cluster/ServerMemberManager.class]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.nacos.core.cluster.ServerMemberManager]: Constructor threw exception; nested exception is ErrCode:500, ErrMsg:jmenv.tbsite.net
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:801)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:224)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serverMemberManager' defined in URL [jar:file:/D:/Software/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-core-2.3.2.jar!/com/alibaba/nacos/core/cluster/ServerMemberManager.class]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.nacos.core.cluster.ServerMemberManager]: Constructor threw exception; nested exception is ErrCode:500, ErrMsg:jmenv.tbsite.net
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:310)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:291)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.nacos.core.cluster.ServerMemberManager]: Constructor threw exception; nested exception is ErrCode:500, ErrMsg:jmenv.tbsite.net
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:226)
Caused by: com.alibaba.nacos.api.exception.NacosException: java.net.UnknownHostException: jmenv.tbsite.net
at com.alibaba.nacos.core.cluster.lookup.AddressServerMemberLookup.run(AddressServerMemberLookup.java:152)
at com.alibaba.nacos.core.cluster.lookup.AddressServerMemberLookup.doStart(AddressServerMemberLookup.java:100)
at com.alibaba.nacos.core.cluster.AbstractMemberLookup.start(AbstractMemberLookup.java:55)
Caused by: java.net.UnknownHostException: jmenv.tbsite.net
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:229)
at java.base/java.net.Socket.connect(Socket.java:609)
at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:177)
at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:508)
at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:603)
at java.base/sun.net.www.http.HttpClient.(HttpClient.java:276)
2024-05-07 10:25:12,594 WARN [WatchFileCenter] start close
2024-05-07 10:25:12,596 WARN [WatchFileCenter] start to shutdown this watcher which is watch : D:\Software\nacos\conf
2024-05-07 10:25:12,597 WARN [WatchFileCenter] already closed
2024-05-07 10:25:12,597 WARN [NotifyCenter] Start destroying Publisher
2024-05-07 10:25:12,597 WARN [NotifyCenter] Destruction of the end
2024-05-07 10:25:12,597 ERROR Nacos failed to start, please see D:\Software\nacos\logs\nacos.log for more details.
2024-05-07 10:25:12,635 WARN [ThreadPoolManager] Start destroying ThreadPool
2024-05-07 10:25:12,635 WARN [ThreadPoolManager] Destruction of the end
ChatGPT提示这个是DNS的错误
这个日志显示了启动 Nacos 时遇到的错误信息:
- Nacos 在启动过程中无法启动嵌入式的 Tomcat 服务器。
- 引发了
ApplicationContextException
异常,其中包含了启动 Tomcat 失败的详细信息。 - 错误日志中提到了
java.net.UnknownHostException: jmenv.tbsite.net
,这可能是 DNS 解析失败导致的问题。
根据错误日志,似乎是因为 Nacos 试图连接某个地址导致的问题。你可以尝试解决以下问题:
- 网络连接问题:确保你的网络连接正常,且能够正确解析
jmenv.tbsite.net
这个地址。你可以尝试在浏览器中访问该地址,以验证网络连接是否正常。 - 防火墙或代理问题:检查是否有防火墙或代理导致了连接问题。有时候,防火墙或代理可能会阻止程序连接到特定的地址或端口。
- DNS 解析问题:尝试在命令行中使用
nslookup jmenv.tbsite.net
命令来检查 DNS 解析是否正常。如果 DNS 解析失败,可能是你的 DNS 配置有问题,你可以尝试更换 DNS 服务器或手动配置 DNS 解析。
然后接下来几版都是围绕解决DNS的,终于在一次次的错误回答中,我失去了耐心,于是我选择上网查找。
终于,我在CSDN上找到了答案:
一个非常简单的命令
start cmd /k "cd /d D:\Software\nacos\bin && startup.cmd -m standalone"
至于命令详解,在CSDN上的文章有解释,想了解的可以去原文查看。
二编
原本的是在Windows 10上面运行的,但是我换了一台Windows 11的电脑发现根本跑不通,就找不到文件路径,测试了一下,才发现Windows 11与Windows 10的进入文件夹的命令不一致,所以稍微修改了一下,适用于Windows 11。
然后想着,既然nacos也可以运行起来,那就写一个打包的文件吧,但是两个bat文件不太好,所以就合成一个文件吧
@echo off
chcp 936
echo 请选择要执行的操作:
echo 1: 运行nacos
echo 2: 打包程序
echo 输入其他数字退出
set /p userinput=请输入您的选择:
if "%userinput%"=="1" (
start cmd /k "E: && cd E:\Software\nacos\bin && startup.cmd -m standalone" REM Win11
REM start cmd /k "cd /e E:\Software\nacos\bin && startup.cmd -m standalone" REM Win10
) else if "%userinput%"=="2" (
start cmd /k "E: && cd E:\Code\zzjz\HaoMianYuan\HMY_Matrix_J_RD\code && mvn clean package -Dmaven.test.skip=true" REM Win11
REM start cmd /k "cd /e E:\Code\zzjz\HaoMianYuan\HMY_Matrix_J_RD\code && mvn clean package -Dmaven.test.skip=true" REM WIn10
) else (
echo 您已选择退出。
)
echo 操作完成。
pause
打开bat文件,输入数字,1是运行nacos,2是打包文件,其他数字退出。
运行的时候如果报错,可以把REM后面的文件删除,仅保留需要执行的文件。
例如:
@echo off
chcp 936
echo 请选择要执行的操作:
echo 1: 运行nacos
echo 2: 打包程序
echo 输入其他数字退出
set /p userinput=请输入您的选择:
if "%userinput%"=="1" (
start cmd /k "E: && cd E:\Software\nacos\bin && startup.cmd -m standalone"
) else if "%userinput%"=="2" (
start cmd /k "E: && cd E:\Code\zzjz\HaoMianYuan\HMY_Matrix_J_RD-1\code && mvn clean package -Dmaven.test.skip=true"
) else (
echo 您已选择退出。
)
echo 操作完成。
pause
Comments NOTHING