一、准备开发环境
SpringBoot2.x
是基于Java8
来编写的,且在构建项目时默认使用Maven
方式,所以也需要配置Maven
环境变量;
二、创建新的SpringBoot项目
注意,无论何种方式,都需要连网才可以创建项目;
初始化一个新的SpringBoot项目,有以下三种方法:
- 使用IDEA内置的
Spring Initializr
创建(File -> New -> Project -> Spring Initializr) - 创建基础Maven项目,修改
pom.xml
添加spring-boot-parent
- 访问 https://start.spring.io 选择依赖后,生成项目并下载
建议使用第一种方式,因为简单快捷,IDEA
内部也是通过 https://start.spring.io 这种方式将构建完成的zip
文件下载到本地然后解压
三、熟悉打包方式
程序打包一般有两种形式:
- 传统的方式是外置
Tomcat
,将应用程序打包成一个xx.war
文件,该文件内只有应用程序源码编译后的.class
以及配置文件
-
SpringBoot
提供了另外一种打包方式,在pom.xml
内通过配置maven plugin
,执行mvn package
打包命令时会将src/main/java
、src/main/resources
目录下的全部文件进行打包,最终生成一个xx.jar
的文件,由于SpringBoot
打包时默认会将Tomcat
的相关依赖一并放入到xx.jar
内,所以通过java -jar xx.jar
命令行的方式可以直接运行
springBoot项目的pom.xml文件中一般默认配置maven plugin打包插件,具体代码如下
:
需要注意的是,spring-boot-maven-plugin
插件打包完成后生成的文件名默认的格式为:<artifactId> + <version>.jar,
如果这并不是你想要的格式,可以通过如下方式进行自定义:
另外,由于项目打包过程中会自动运行测试,实际工作中,由于模块代码非常多,如果运行测试,会导致打包非常慢,所以如果想要在打包的过程中跳过测试,则可以在pom.xml中做如下配置:
四、运行打包好的Jar
在本地运行服务,最简单的,可以直接在jar目录下使用命令 java -jar xxx.jar即可:
这种启动方式有个问题,就是当我们关闭终端的时候,服务随之关闭,那么在服务器上如何如何后台运行应用程序呢?
使用nohup命令,千万不要忘了最后面的&符号
此时,如果想结束应用程序,使用命令kill
,从而达到了结束进程的效果 ;
这样启动是不是也有个问题,看不到启动日志,那该如何查看日志呢?
其实,在启动的时候,控制台显示appending output to nohup.out的时候,就
应猜到,日志已输出到了名为nohup.out
的文件内,可以通过tail -f nohup.out
命令查看运行日志内容,如下所示:
考虑到实际工作中一台服务器上可能部署运行多个应用程序,为了区分每个应用程序的日志,需要指定日志的输出文件:
然后使用命令tail -f 查看日志文件:
根据实际的工作经验,考虑到相同ServiceID
的服务可能存在部署不同版本的情况,
所以建议日志文件的名称格式:Service ID + Service Version;
五、
JVM Server模式
在JVM
内有一个模式的概念,开发环境推荐使用client
模式,因为它启动快,可以提高一部分开发效率;生产环境则是推荐使用server
模式,因为编译比较彻底,服务在运行期间相对于client
性能高一些;
设置使用server
模式也比较简单,我们只需要执行java -server
命令即可:
JVM
在client
模式下运行,默认Xms
大小为1M
,默认Xmx
大小为64M;
在server
模式下默认Xms
大小为128M
,默认Xmx
大小为1024M
,可以根据实际情况进行修改分配:
实际工作中,为了使用的方便,我们通常会对上述命令进行封装,然后放在jar同级目录下,如下所示:
#bin/bash
nohup java -server -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms256m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -jar "$1" > "$1.log" 2>&1 &
tail -1000f "$1.log"
运行应用程序的时候只需要执行run.sh脚本,同时传入具体的jar作为第一个入参即可: