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 打包

springboot 多环境切换配置_java


在指令窗口输入:mvn clean package

springboot 多环境切换配置_jar_02


在target目录下可以看到生成的jar包

springboot 多环境切换配置_springboot 多环境切换配置_03


二、在windows系统执行

指令窗口执行: java -jar topo.jar三、在linux系统执行

3.1. 上传jar包至linux服务器

springboot 多环境切换配置_java_04


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环境启动效果)

springboot 多环境切换配置_java_05


linux环境启动效果

springboot 多环境切换配置_jar_06

五、FAQ

  1. 执行 java -jar topo.jar 启动过程中报错空指针

    通过错误可以看出获取对象Project为空

    查看初始化逻辑,获取文件路径失败。

    这种写法在eclipse中可以执行成功,但是在jar包中获取文件路径就失败了。
    原因是获取的文件路径只能到jar包,jar包的内部文件目录无法获取到。

springboot 多环境切换配置_java_07


解决方法

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();

springboot 多环境切换配置_springboot 多环境切换配置_08