spring boot 部署到 centos7

安装jdk

第一步,下载

先进入官网:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

方法一:下载安装包到本地,再上传到服务器

根据系统选择相应版本,服务器是centos7 64位的,所以选择下载linux x64的安装包

1

下载成功后,使用上传工具( lrzsz,xtfp等)将安装包上传到/usr/local(根据自己习惯,选择目录)目录下

方法二:wget下载

在上面下载的页面,根据需要下载的版本,右键鼠标复制链接地址,然后执行wget命令:

wget --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie;" https://download.oracle.com/otn/java/jdk/8u231-b11/5b13a193868b4bf28bcb45c792fce896/jdk-8u231-linux-x64.tar.gz

命令执行成功后即下载成功,可用ls命令查看当前目录下有没有对应的文件

第二步,解压

切换到安装包保存目录:

cd /usr/local

解压到当前目录:

tar -zxvf jdk-8u231-linux-x64.tar.gz

第三步,配置环境变量

打开系统环境变量配置文件:

vi /etc/profile

按 i 进入编辑模式,然后在 profile 文件的末尾加上如下内容:

1
2
3
4
5
6
## JAVA
JAVA_HOME=/usr/local/jdk1.8.0_161
JRE_HOME=/usr/local/jdk1.8.0_161/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH

然后按 esc 键后输入 :wq 或者 :x 保存退出

为了使得配置文件立即生效,执行如下命令:

source /etc/profile

第四步,测试jdk是否安装成功

查看jdk版本信息:

java -version

在控制台输出 java 版本信息则表示安装成功。

安装tomcat

提示:打包成 war 包方式部署在外部tomcat(非springboot自带)上,或者多项目部署,才需要安装 tomcat,否则不需要安装 tomcat,直接打包成 jar 包运行即可。

第一步,下载

tomcat 下载方式与 jdk 下载方式类似,也是有两种方法

先进入 tomcat 官网:https://tomcat.apache.org/download-80.cgi

方法一:先从官网下载到本地,再上传到服务器

1

方法二:wget下载

wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.47/bin/apache-tomcat-8.5.47.tar.gz

第二步,解压

切换到tomcat下载目录:

cd /usr/local

解压到当前目录:

tar -zxvf apache-tomcat-8.5.47.tar.gz

第三步,启动

切换到解压后得 tomcat 得bin 目录下:

cd /usr/local/apache-tomcat-8.5.47/bin

执行启动命令:

./startup.sh

查看 tomcat 启动日志:

tail -f ../logs/catalina.out

1

发现启动耗时太长,解决方法可参考此篇文章:https://blog.csdn.net/u013939884/article/details/72860358

我自己是通过修改 JR E中的 java.security 文件为 securerandom.source=file:/dev/urandom 来解决该问题。

第四步,测试

访问网址:http://ip:8080/,访问时将 ip 替换为自己的服务器ip,出现常见的 tomcat 欢迎页面,表示 tomcat 启动成功。

备注:如果tomcat启动成功,但是该页面又访问不了,请检查 8080 端口是否开放。

以war包方式部署

第一步,将项目打包方式修改为war

修改 pom.xml 里面的 packaging 属性为 war:

1

第二步,在 idea 中 Terminal 控制台执行 maven 打包命令

mvn clean package -Dmaven.test.skip=true

这里也可打开 idea 最右侧的 Maven 中的 Lifecycle,双击 package 打包

打包成功后如下(图片是 jar 包,war 包只是后缀名不同):

1

第三步,上传到服务器

使用上传工具将包上传到服务器 /usr/local/apache-tomcat-8.5.47/webapps 目录下

先将该目录下的 ROOT 目录删除,然后将 ivanky-0.0.1-SNAPSHOT.war 重命名为ROOT.war

第四步,启动tomcat

第五步,测试

输入 ip 地址链接访问项目想访问的接口或目录

到这里就部署成功了!

优化处理

上面这样每次以 war 包方式打包,war 包比较大,我们解压 war 包之后,可以看到文件总共几十M,lib 包也是 几十M,而 classes 文件夹只有 几百kb。

可以看到 lib 包的大小占到了90%以上,实际代码容量非常小,每次都重新打 war 包,实际上是比较麻烦的,也没有必要。所以在部署实际项目的时候,如果决定要以 war 包方式部署项目,我通常在 pom 依赖没有改变的时候,只会将项目 target 目录下的 classes 目录覆盖服务器上的 classes 目录即可。

这样可以大幅度的提升项目部署速度,尤其是在网速比较慢的时候。

只有当pom依赖有改动,才重新打一个完整的war包部署到服务器上。

以jar包方式部署

第一步,将项目打包方式修改为jar

同样去 pom.xml 中修改 packaging 属性:

1

第二步,在idea中Terminal控制台执行maven打包命令

这里也可打开 idea 最右侧的 Maven 中的 Lifecycle,双击 package 打包

打包成功后如下(图片是 jar 包,war 包只是后缀名不同):

1

第三步,上传到服务器

上传到服务器上任意你想放的项目文件夹下即可

运行jar包

先切换到jar包所在目录:

cd /usr/local/xxxxxxx

运行 jar:

java -jar springboot-helloworld-0.0.1-SNAPSHOT.jar

出现如下信息表示启动成功:

1

第五步,测试

输入 ip 地址链接访问项目想访问的接口或目录

到这里就部署成功了!

这种方式部署的缺点:

  1. 打包后,配置文件和依赖包都在jar包内部,配置文件无法修改。而实际项目中,开发环境的配置与服务器环境配置并不完全一致,例如数据库信息,日志信息保存路径等,想要修改配置文件也无法修改
  2. 项目依赖包一般不会有变化,但是每次打包都会把依赖包打包到jar包内
  3. 控制台页面一关闭,springboot服务也关闭

Jar包、配置文件、依赖包分开打包

注:该方法本人暂未测试过

由于每次以 jar 包方式部署会有上面说的缺点,为了解决这些问题,可以将 jar 包、配置文件、依赖包分开打包。分开打包后,有如下好处:

  1. 可以实现当依赖包有变化时,才重新打包依赖包
  2. 配置文件也可以修改
  3. 由于依赖包和 jar 包分离,可以减少 jar 文件大小。jar 文件减少,可以缩短上传到服务器的时间

第一步,pom文件修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.lnjecit</groupId>
<artifactId>springboot-helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>springboot-helloworld</name>
<description>Demo project for Spring Boot</description>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<!--<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>-->

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<excludes>
<exclude>*.properties</exclude>
<exclude>*.yml</exclude>
</excludes>
<archive>
<manifest>
<!-- 为依赖包添加路径, 这些路径会写在MANIFEST文件的Class-Path下 -->
<mainClass>com.lnjecit.springboothelloworld.SpringbootHelloworldApplication</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 -->
<useUniqueVersions>false</useUniqueVersions>
</manifest>
<manifestEntries>
<!-- 在Class-Path下添加配置文件的路径 -->
<Class-Path>config/</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-xmls</id>
<phase>process-sources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/config</outputDirectory>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<includes>
<include>*.properties</include>
<include>*.yml</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>target/lib/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>


</project>

第二步,在idea中Terminal控制台执行maven打包命令

mvn clean package -Dmaven.test.skip=true

命令执行完毕后,在 target 目录下生成了 jar 包、config、lib 三部分,如下图:

1

第三步,将jar包上传到服务器/usr/local/springboot-helloworld/deploy目录下

第四步,运行jar包

先切换到jar包所在目录:

cd /usr/local/springboot-helloworld/deploy/

运行jar:

java -jar springboot-helloworld-0.0.1-SNAPSHOT.jar

运行成功后,跟上面一样测试即可

jar包后台运行

普通运行:

java -jar springboot-helloworld-0.0.1-SNAPSHOT.jar

指定端口运行:

java -jar springboot-helloworld-0.0.1-SNAPSHOT.jar --server.port=8082

后台运行:

方法一:

nohup java -jar springboot-helloworld-0.0.1-SNAPSHOT.jar &

启动后会在当前目录生成一个 nohup.out 文件,可用查看启动情况,命令tail -f nohup.out

查看启动后的服务:

ps -ef | grep javaps -aux | grep java

1

关闭服务:

kill -9 3730 即: kill -9 进程号

方法二:

nohup java -jar demo.jar & > log.file 2>&1 &

springboot 项目部署方式到这里就介绍完了!

除未使用过的 jar 分包部署外,其它都亲自实践过~

参考链接:https://www.cnblogs.com/zuidongfeng/p/8859229.html