记一次SpringCloud把SpringBoot项目打成jar包使用java -jar命令执行 命令行参数无效,没有生效的问题
程序员文章站
2022-05-01 12:29:29
...
最近公司也采用了当前炒的比较如火如燎的SpringCloud微服务技术,经过了多方面技术对比选型,还是决定使用了相对比较新的技术
技术主体框架如下:
- 注册中心:Nacos
- 配置中心:Nacos
- SpringBoot 2.2.5.RELEASE
- SpringCloud Hoxton.SR3
- spring-cloud-alibaba 2.2.1.RELEASE
使用这套框架在实际开发中也没怎么遇到太多难题。但是当我们开发一个demo准备进行测试环境部署时,出了一个很莫名其妙的问题:
项目在本地开发调试都是正常的,打成jar包进行测试部署时,使用命令java -jar xxx.jar --server.port
发现配置的命令参数server.port
并没有生效,又换了一个思路,配置bootstrap.yml文件环境分离的方式去启动,java -jar xxx.jar --spring.profiles.active=test
,还是没有如期为我们切换配置文件。
1. 怀疑是配置中心的配置把我们命令参数给覆盖了
查找了官方的一些配置,采用在配置中心配置官方提供的参数对配置优先级进行配置:
spring.cloud.config.override-none=true
spring.cloud.config.allow-override=true
spring.cloud.config.override-system-properties=false
配置过后,发现还是不能正常的使用命令行参数,这个时候就比较大条了,想了一下,既然不是配置中心的问题,那么问题就出在SpringBoot上了,我们的命令行参数是通过Application
启动类的main
方法的args
进行传递的,最后发现果然问题出在启动类上
2. 排查启动类是否收到命令行参数
通过在启动类添加打印args
参数内容,发现命令行参数是传递进来了,但是因为博主笔误,args并没有被加载到Spring上下文中
@EnableDiscoveryClient
@SpringBootApplication(scanBasePackages = {"com.yxh.www"})
public class AuthorServerApplication {
public static void main(String[] args) {
// 错误写法:没把args传过去
// SpringApplication.run(AuthorServerApplication.class);
SpringApplication.run(AuthorServerApplication.class,args);
}
}
就因为这几个字符的问题,排查了一个上午,所以决定把这个写出来,并以此为戒,写代码一定要细心细心…
上一篇: 背景图自适应小技巧