前言
在日常开发中,我们启动springboot项目直接运行项目中的启动类就可以了。但是如果需要将jar包在linux服务器上部署,没有启动类又该怎么启动呢?肯定很多小伙伴会说,那不是很简单么,java -jar不就行了么?这里详细介绍下java -jar中一些常用命令参数配置。
微服务启动中配置环境选择
在微服务开发中,如果我们没有使用springcloud config来统一管理各个服务的配置,那么配置文件就由服务本身来进行维护。一个服务需要在开发,测试,生产环境部署。如果只有一个配置文件,在不同环境部署的时候去修改这个配置文件。这种方法可行,但是效率很低而且还很容易出错。所以我们一般会采用多个配置文件。在springboot中, 多环境配置的文件名需要满足 application-{profile}.properties的格式, 其中{profile}对应你的环境标识, 如下所示
- application-dev.properties 开发环境
- application-test.properties 测试环境
- application-prod.properties 生产环境
至于具体哪个配置文件会被加载,需要在 application.properties文件中通过spring.profiles.active 属性来设置,其值对应配置文件中的{profile}值。 如spring.profiles.active = test 就会加载 application-test.properties配置文件内容。所以在java -jar的时候,可以指定配置文件来选择不同的环境配置。如下所示
nohup java -jar myapp.jar --spring.profiles.active=test &
这里需要注意的一点,如果在jar包的包内包外都配置application-*.properties文件,服务启动的时候默认是先采用包外的配置。某个配置项在包外配置文件中没有配置,那么会去包内配置文件去检索,如果依旧没有找到,则服务启动会报错。
端口,堆内存配置
nohup java -Xms500m -Xmx500m -Xmn256m -Xss256k -server -XX:+HeapDumpOnOutOfMemoryError
-jar myapp.jar --server.port=8080 -verbose:class &
在上面的启动命令中
- -Xms500m -Xmx500m -Xmn256m -Xss256m 用来设置堆内存
- -server:服务器模式,在多个CPU时性能佳,启动慢但性能好,能合理管理内存
- 在排查jar包冲突时,可以指定启动的-verbose:class 打印出启动的应用实际加载类的路径,来排查来源。
- -XX:+HeapDumpOnOutOfMemoryError:在堆溢出时保存快照
- --server.port=8080 指定端口
指定输出位置
nohup java -jar -Dlogging.file=/usr/logs/myjar.log myjar.jar &
指定服务启动日志输出的文件。
有的时候日志比较多,导致保存日志的文件比较大,而这些日志没有必要保留。
nohup java -jar myjar.jar >/dev/null 2>&1 &
>/dev/null 2>&1。这条命令其实分为两命令,一个是>/dev/null,另一个是2>&1。
1. >/dev/null
这条命令的作用是将标准输出1重定向到/dev/null中。/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,不会保存。那么执行了>/dev/null之后,标准输出就会不再存在,没有任何地方能够找到输出的内容。
2. 2>&1
这条命令用到了重定向绑定,采用&可以将两个输出绑定在一起。这条命令的作用是错误输出将和标准输出同用一个文件描述符,其实就是说将错误输出和标准输出都输出都同一个文件。linux在执行shell命令之前,就会确定好所有的输入输出位置,并且从左到右依次执行重定向的命令,所以>/dev/null 2>&1的作用就是让标准输出重定向到/dev/null中(丢弃标准输出),然后错误输出由于重用了标准输出的描述符,所以错误输出也被定向到了/dev/null中,错误输出同样也被丢弃了。
总结
上面简单介绍了java -jar启动中经常会用到的一些参数配置。都是些基础知识,简单记录下。