目录

问题现象:

问题分析:

1、本机IDEA启动测试:        

2、jar包脚本命令启动测试

解决方法:


问题现象:

        今天在使用脚本文件(.sh文件)启动 一个java服务时,发现脚本启动命令中添加的变量参数无法被服务识别到!!!


问题分析:

        下面将通过一个java服务(gateway网关服务)来演示本文章出现的问题现象!

        首先查看当前nacos注册中心的服务列表,可以看见并没有gateway服务:

1、本机IDEA启动测试:        

        接着先在本机IDEA开发工具上测试该java服务(gateway网关服务)源码的启动是否正常,且变量参数是否可用。

        在启动类配置项中添加如下图所示的参数,作用是为了:

让程序代码能读取到这些变量参数,并注册到nacos中心,成为微服务!

        gateway服务启动成功,端口是8001

        查看nacos注册中心:

        可以看见服务是正常地注册到nacos中心了,也可以进一步查看gateway服务详情来确认:

         由此可知IDEA中配置的变量参数是生效了,可以被服务成功识别到的!

         接下来是jar包测试!

2、jar包脚本命令启动测试

        先把1、中本机IDEA启动的gateway服务关闭,再查看nacos中心的服务列表:

         可以看见此时已经没有gateway服务了,接下来执行脚本文件来通过该服务的jar包启动该服务,脚本文件内容如下:

         使用脚本命令启动服务:

        启动成功:

        查看nacos注册中心,并没有发现gateway服务

        查阅网上资料发现有一个说法是:

-D 变量参数要放在 -jar 命令前面,放在后面会失效!

        于是我修改了脚本文件如下:

        再启动,确实可以了:

        感觉挺神奇的,想到这个-D 变量参数原来和 -jar 的顺序有关,于是我又做了一下尝试,如下:

格式为:java -jar -X... -D... 包名($APP_NAME) >...

        这种情况下也是可以的,由此可见,关于这个顺序的特点,网上提到的-D 变量参数 放在 -jar 后面会失效的说法其实是有问题,更准确的描述应该是:

1、-D 变量参数 放在 -jar 前面,可以生效;

2、-D 变量参数 放在 -jar 后面,但必须要放在 包名(xxx.jar) 前面,也可以生效

总结:-D 变量参数 要放在 包名(xxx.jar) 前面。


解决方法:

        脚本中jar包的启动命令从:

nohup java -jar -Xms256m -Xmx2048m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m $APP_NAME -Dspring.profiles.active=dev -Dspring.cloud.nacos.custom=true -Ddubbo.registry.custom=true -Dspring.cloud.nacos.config.server-addr=192.168.16.230:8848 -Dspring.cloud.nacos.config.namespace=a605e7bd-ef02-4da6-bc70-2dbb1a17eab6 > run.log 2>&1 &

        修改为以下两种都可以:

        1、格式为:java -D... -jar 包名 >...

nohup java -Dspring.profiles.active=dev -Dspring.cloud.nacos.custom=true -Ddubbo.registry.custom=true -Dspring.cloud.nacos.config.server-addr=192.168.16.230:8848 -Dspring.cloud.nacos.config.namespace=a605e7bd-ef02-4da6-bc70-2dbb1a17eab6 -jar -Xms256m -Xmx2048m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m $APP_NAME > run.log 2>&1 &

        2、格式为:java -jar -D... 包名 >...

nohup java -jar -Xms256m -Xmx2048m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -Dspring.profiles.active=dev -Dspring.cloud.nacos.custom=true -Ddubbo.registry.custom=true -Dspring.cloud.nacos.config.server-addr=192.168.16.230:8848 -Dspring.cloud.nacos.config.namespace=a605e7bd-ef02-4da6-bc70-2dbb1a17eab6 $APP_NAME > run.log 2>&1 &
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐