SpringBoot 项目部署到linux环境
参考文档:
一、项目打包
1.1. 在pom.xml文件中添加springboot打包插件
<build>
<finalName>${project.artifactId}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.*</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.yml</include>
</includes>
<!--是否替换资源中的属性-->
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.TopoStartApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
1.2. 在代码目录使用 mvn clean package 打包
在指令窗口输入:mvn clean package
在target目录下可以看到生成的jar包
二、在windows系统执行
指令窗口执行: java -jar topo.jar三、在linux系统执行
3.1. 上传jar包至linux服务器
3.2. 在linux服务器上运行Jar文件
$ java -jar topo.jar
这种方式特点是ssh窗口关闭时,程序中止运行.或者是运行时没法切出去执行其他任务,有没有办法让Jar在后台运行呢:
方法一:
$ nohup java -jar topo.jar 2>&1 &
//nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行
//当用 nohup 命令执行作业时,缺省情况下该作业的所有输出被重定向到nohup.out的文件中
//除非另外指定了输出文件。
方法二:
$ nohup java -jar topo.jar > system.log 2>&1 &
//这种方法会把日志文件输入到你指定的文件中,没有则会自动创建
3.3 查看某端口占用的线程的pid: 可以看出当前端口占用的pid是101003
-bash-4.3$ netstat -nlp|grep 20011
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 :::20011 :::* LISTEN 101003/java
-bash-4.3$
3.4 通过pid可以查看当前程序运行情况
(1)查看linux中的当前java进程:
-bash-4.3$ jps
70483 SCS_ServerStart
70713 SCC_ClientStart
103690 Jps
18628 start.jar
101003 jar
-bash-4.3$
(2)查看java进程参数值:初始堆内存
-bash-4.3$ jinfo -flag InitialHeapSize 101003
-XX:InitialHeapSize=262144000
-bash-4.3$
(3)jstat
查看类装载信息:
-bash-4.3$ jstat -class 101003
Loaded Bytes Unloaded Bytes Time
10187 19399.0 1 1.0 11.09
-bash-4.3$
(4)查看线程内容:jstack PID
-bash-4.3$ jstack 101003
四、验证启动情况
在浏览器上访问验证(windows环境启动效果)
linux环境启动效果
五、FAQ
- 执行 java -jar topo.jar 启动过程中报错空指针
通过错误可以看出获取对象Project为空
查看初始化逻辑,获取文件路径失败。
这种写法在eclipse中可以执行成功,但是在jar包中获取文件路径就失败了。
原因是获取的文件路径只能到jar包,jar包的内部文件目录无法获取到。
解决方法
i).把该模版文件放到jar项目外,在项目中配置该模版文件的绝对路径,不太推荐这种方式,可能会忘记配置模版
ii.)通过 ClassPathResource resource = new ClassPathResource(“static/office_template/word_replace_tpl.docx”);方式读取
直接使用它的流方法
ClassPathResource resource = new ClassPathResource("conf/serverconf.yml");
File sourceFile = resource.getFile();
InputStream fis = resource.getInputStream();