首页 > 技术文章 > springboot -jar部署

KdeS 原文

springboot的打包方式有很多种。有打成war的,有打成jar的,也有直接提交到github,通过jekins进行打包部署的。这里主要介绍如何打成jar进行部署。不推荐用war,因为springboot适合前后端分离,打成jar进行部署更合适。 首先需要在application.properties当中配置端口

1.pom.xml配置

    <groupId>com.web.boot</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1</version>
    <!--默认为jar方式 -->
    <packaging>jar</packaging> 
    <!--改为war方式 -->
    <!--  <packaging>war</packaging>-->
<build>
        <!-- 指定打包项目名称 -->
        <finalName>SpringBoot</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${jdk.version}</source><!-- 指定jdk版本 -->
                    <target>${jdk.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding><!-- 指定编码版本 -->
                </configuration>
            </plugin>
            <!--该插件的主要功能是进行项目的打包发布处理 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.5.4.RELEASE</version>
                <configuration> <!--设置程序执行的主类,指定程序入口 -->
                    <mainClass>com.web.boot.ApplicationStart</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal><!-- repackage将jar / war 重新打包为可执行文件-->
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

2.打包 项目右键 --> run as -->Maven clean

​ 项目右键 --> run as -->Maven build 出现如下界面

 在Goals后面的框中输入打包命令:

clean package  
clean package -D maven.test.skip=true   //不执行测试用例,也不编译测试用例类
clean package -D skipTests     //不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。

确认打包:run

3.此时将形成“SpringBoot.jar”程序文件,并且这个文件里面包含有全部的依赖支持库文件。

 4.将“SpringBoot.jar”文件随意拷贝到一个路径之中,例如:D盘,而后进入到命令行方式:java -jar SpringBoot.jar

 5.执行完成之后,我们的服务就跑起来了,可以通过浏览器正常访问:

 http://localhost:8200/SpringBoot/testcontroller/testfile

 6.Linux下发布过程,如下:

 6.1 (特殊情况)查看项目端口是否被占用,格式:

netstat -tunlp | grep 端口号

 可以看到 8200 端口已经被轻 java 服务占用,PID(113670)  

此种情况的解决办法有如下两种:

@A   使用kill命令结束占用端口的进程后继续布置项目,格式如:kill -9 PID
@B   修改项目配置文件application.properties的端口配置,修改一个没被占用的端口,重新打包部署
@C   换一台没有占用此端口的服务器继续部署项目

6.2 项目已经部署过了,更新了项目内容后,重新部署替代之前的版本的项目,那么一般则分为以下三个步骤:

@A  结束上一个版本的进程,不然会冲突:kill -9 $(ps -aef | grep p1upgradeTask-0.0.1-SNAPSHOT.jar | grep -v grep | awk '{print $2}')

以下对此命令作解释

ps -aef | grep SpringBoot.jar  

//查询出我们部署的项目的信息(包含有grep本身的进程信息)

包含内容有:UID PID PPID C STIME TTY TIME CMD这几个选项

UID:用户ID

PID:进程ID

PPID:父进程ID

C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高

STIME:进程启动的时间

TTY:完整的终端名称

TIME:CPU时间

CMD:完整的启动进程所用的命令和参数



其中的grep -v grep 是干啥的呢 ?

为了去除包含grep的进程行 ,避免影响最终数据的正确性 ,因为grep本身也是一个进程。



 
awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息
$2:表示第二个字段

print $2 : 打印第二个字段

awk '{print $2}' : 一行一行的读取指定的文件, 以空格作为分隔符,打印第二个字段

   6.3 备份

 mv SpringBoot.jar SpringBoot__`date '+%Y-%m-%dT%H-%M-%S'`.jar.backups

注意:“`” 重音符或抑音符,又称反单引号,是西文字符中的附加符号,主要用于计算机相关领域。位置在键盘中数字键“1”的左边,其上档符号是“~ ”,使用Shift键可以换挡输入。由于计算机显示的原因,反单引号非常容易和单引号 ‘ 混淆。

 6.4 导入新版本的jar包

mv /opt/upfile/SpringBoot.jar  SpringBoot.jar

这里说明以下,我提前把打好的jar包放入了/opt/upfile/目录下,这一步自己去做,方式有很多种,我用的“rz”命令,传入的。

 6.5 防火墙开放端口,不然项目发布,外部是访问不到的

vi /etc/sysconfig/iptables

重启服务:service iptables restart

测试端口是否开通:Telnet 192.168.95.4 8200

6.6  项目发布

 后台无窗口发布:nohup java -jar SpringBoot.jar >nohup.out 2>&1 &

上面的2 和 1 的意思如下:

0    标准输入(一般是键盘)
1    标准输出(一般是显示屏,是用户终端控制台)
2    标准错误(错误信息输出)

将运行的jar 错误日志信息输出到nohup.out文件中,

然后(>&1)就是继续输出到标准输出(前面加的&,是为了让系统识别是标准输出),最后一个&,表示在后台运行。

6.7 访问测试

http://192.168.95.4:8200/SpringBoot/testcontroller/testfile

推荐阅读