当前位置:   article > 正文

springboot/springcloud父子工程项目 打包 部署 到linux cenos7全流程 及 注意事项_spring colud打包成程序

spring colud打包成程序

一、打包

例如如图所示的父子工程
common模块是放置一些全局可用的工具类或者配置类
service模块是具可运行的springboot模块
在这里插入图片描述

1.父工程pom.xml配置:

依赖管理,依赖版本管理
在这里插入图片描述

 <!--定义父工程-->
    <!--表明整个项目用的是springboot工程-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <!--注册子工程-->
    <modules>
        <module>common</module>
        <module>service</module>
    </modules>


    <!--本工程信息-->
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.platform</groupId>
    <artifactId>platform_parent</artifactId>
    <!--用于管理子模块,且无入口程序,打包为pom-->
    <packaging>pom</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>platform_parent</name>
    
    <!--版本管理,限定工程所用的所有依赖的版本-->
    <properties>
    
    </properties>
    
     <!--具体依赖-->
	<dependencyManagement>
        <dependencies>
		</dependencies>
    </dependencyManagement>

  • 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

2.非运行模块配置:

非运行模块的 父 pom.xml
在这里插入图片描述
引入所有非运行模块需要的依赖(依赖不可以隔代传递,只能父传子,不能爷传孙)

	<!--指明自己父亲是谁-->
	<parent>
        <artifactId>platform_parent</artifactId>
        <groupId>com.platform</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <!--本模块-->
    <modelVersion>4.0.0</modelVersion>
    <artifactId>common</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>common</name>
    <!--管理子模块,无入口程序,打包为pom-->
    <packaging>pom</packaging>



    <!--注册子模块-->
    <modules>
        <module>common_utils</module>
        <module>service_base</module>
        <module>spring_security</module>
    </modules>

    <dependencies>
    </dependencies>
  • 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

3.非运行模块的具体模块pom.xml

在这里插入图片描述

	<parent>
        <artifactId>common</artifactId>
        <groupId>com.platform</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

	!!!重点,非运行模块需要被运行模块引入,所以把它打包为jar包
    <!--非程序入口模块需要打包为jar-->
    <packaging>jar</packaging>

    <version>0.0.1-SNAPSHOT</version>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>common_utils</artifactId>

    <dependencies>
    </dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

4.运行模块的父模块pom.xml

在这里插入图片描述

<parent>
        <artifactId>platform_parent</artifactId>
        <groupId>com.platform</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <!--管理子模块,无入口程序,打包为pom-->
    <packaging>pom</packaging>


    <!-- 定义子模块 -->
    <modules>
        <module>acl</module>
    </modules>


    <dependencies>
        !!!这里要引入好子模块需要的依赖,不需要写版本号,因
        为继承了parent的依赖,只是因为依赖不能爷传孙,需要这
        里引入,才能借助爷传父,父传孙!!!
    </dependencies>

    <!--打包规则,可以继承给acl等子模块,子模块就不用再写-->
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.yml</include>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.yml</include>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>
  • 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

5.可运行的子模块

在这里插入图片描述

	<parent>
        <artifactId>service</artifactId>
        <groupId>com.platform</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>acl</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <!--项目入口程序,需要打包为jar-->
    <packaging>jar</packaging>

    <dependencies>
       
    </dependencies>

    <!--maven的打包插件,可运行模块必须加入这个打包插件-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.2.1.RELEASE</version>
            </plugin>
        </plugins>
    </build>
  • 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

6.点击idea右侧maven,找到root工程,先点击clean,清空已打包过的文件,然后再点package,进行再打包

在这里插入图片描述
最后BUILD SUCCESS,表示打包成功,若有报错,自己查看报错信息,然后去搜索解决在这里插入图片描述

二、部署

1.去项目文件夹下,“可运行模块”的目录下在target文件夹中找到打包好的jar包,是“可运行模块”下,才是你真正要部署的服务
在这里插入图片描述
2.如果使用的是云服务器,联系系统管理员,在控制台开放项目的端口,否则如何都不能访问此端口!
先查看自己要部署的端口号是否被占用,输入

lsof -i:端口号
  • 1

如果出现下图,说明被占用,则只能去修改该项目端口号,再重新打包部署
在这里插入图片描述

然后,
①输入命令开启防火墙

systemctl start firewalld
  • 1

②开放指定端口

firewall-cmd --zone=public --add-port=8080/tcp --permanent
  • 1

命令含义:
–zone #作用域
–add-port=1935/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效
③重启防火墙

firewall-cmd --reload
  • 1

如果嫌每个服务都要操作防火墙麻烦,可以关闭防火墙,但是系统会不安全
关闭防火墙:

 systemctl stop firewalld.service
  • 1

④测试远程端口是否开放:
在本地window的cmd中输入

telnet ip 端口号 (如如telnet 172.17.193.18 8080)
  • 1

然后回车,如果窗口跳转,说明此端口已开放。

在这里插入图片描述
用 xftp 和 xShell 连接到linux远程系统,将jar包复制到项目文件夹下,打开终端,在jar包目录下后台启动jar包,输入指令,然后按crtl +c,项目就会在后台启动

nohup java -jar acl-0.0.1-SNAPSHOT.jar >logs.txt &
  • 1

logs.txt表示控制台输出文件
如果上面那个失败,可以用简单的,但是没有控制台的输出文件

(1)执行java -jar xxx.jar,终端会输出一些东西

(2)ctrl+z 退出到控制台,输入指令 bg,便可后台运行

(3)exit,断开linux连接(非必要)
完成以上3步,退出SHELL后,jar服务一直在后台运行。
在浏览器或swagger随意访问一个可访问的接口url,如果成功,则部署成功

如果需要用指定jvm参数执行jar包:

#直接启动
java -jar -Xms128M -Xmx256M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M acl-0.0.1-SNAPSHOT.jar 

#后台启动,日志输出到logs.txt中
nohup java -jar -Xms128M -Xmx256M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M acl-0.0.1-SNAPSHOT.jar >logs.txt &

Xms : 堆内存初始大小
Xmx : 堆内存最大值
PermSize : 永久内存初始大小
MaxPermSize : 永久内存最大值
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4.如果项目更新、关闭运行等,使用下面命令查看运行的项目的进程id(pid)

lsof -i:端口号
  • 1

在这里插入图片描述
然后输入以下,杀死该进程,注意是pid,不要输错输成端口号!

kill -9 21238
  • 1

把之前运行的jar包和日志文件删除。

然后重复步骤3,就能重新部署

最后,如果中间环节出错,请自寻搜索解决,大致打包部署流程如上
当然真正工作中应该不会这样手动打包部署,这样人肉运维在微服务较多时就非常难以管理,比较多是通过Jenkins或者云原生平台进行CI、CD流程,当然很多云原生也是集成Jenkins、docker等来实现CI、CD流程。
虽然说,现在都是自动化部署Java项目了,但是最基本的打包部署流程还是得了解清楚的,所有的自动化流程,一般都是基于最基础的实现的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/541280
推荐阅读
相关标签
  

闽ICP备14008679号