springboot项目启动 java -jar详解

时间:2024-10-19 08:26:17

前言

在日常开发中,我们启动springboot项目直接运行项目中的启动类就可以了。但是如果需要将jar包在linux服务器上部署,没有启动类又该怎么启动呢?肯定很多小伙伴会说,那不是很简单么,java -jar不就行了么?这里详细介绍下java -jar中一些常用命令参数配置。

微服务启动中配置环境选择

在微服务开发中,如果我们没有使用springcloud config来统一管理各个服务的配置,那么配置文件就由服务本身来进行维护。一个服务需要在开发,测试,生产环境部署。如果只有一个配置文件,在不同环境部署的时候去修改这个配置文件。这种方法可行,但是效率很低而且还很容易出错。所以我们一般会采用多个配置文件。在springboot中, 多环境配置的文件名需要满足 application-{profile}.properties的格式, 其中{profile}对应你的环境标识, 如下所示

  • 开发环境
  • 测试环境
  • 生产环境

至于具体哪个配置文件会被加载,需要在 文件中通过 属性来设置,其值对应配置文件中的{profile}值。 如 = test 就会加载 配置文件内容。所以在java -jar的时候,可以指定配置文件来选择不同的环境配置。如下所示

nohup java -jar  --=test &

这里需要注意的一点,如果在jar包的包内包外都配置application-*.properties文件,服务启动的时候默认是先采用包外的配置。某个配置项在包外配置文件中没有配置,那么会去包内配置文件去检索,如果依旧没有找到,则服务启动会报错。

端口,堆内存配置

nohup java -Xms500m -Xmx500m -Xmn256m -Xss256k -server -XX:+HeapDumpOnOutOfMemoryError
 -jar   --=8080 -verbose:class &

在上面的启动命令中

  • -Xms500m -Xmx500m -Xmn256m -Xss256m 用来设置堆内存
  • -server:服务器模式,在多个CPU时性能佳,启动慢但性能好,能合理管理内存
  • 在排查jar包冲突时,可以指定启动的-verbose:class  打印出启动的应用实际加载类的路径,来排查来源。
  • -XX:+HeapDumpOnOutOfMemoryError:在堆溢出时保存快照
  • --=8080 指定端口

指定输出位置

nohup java -jar -=/usr/logs/  &

指定服务启动日志输出的文件。

有的时候日志比较多,导致保存日志的文件比较大,而这些日志没有必要保留。

nohup java -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启动中经常会用到的一些参数配置。都是些基础知识,简单记录下。