首页 > 其他分享 >Spring Boot入坑-11-打包和发布

Spring Boot入坑-11-打包和发布

时间:2024-06-09 21:14:59浏览次数:20  
标签:11 文件 Tomcat 命令 Spring Boot jar Nginx 使用

准备环境

Java运行环境

  • Java的应用多发布于Linux环境,如CentOS 7

  • 部署应用前,在远程Linux主机或虚拟机上,需要安装JDK或JRE,使用如下命令安装一个Open JDK

    yum -y install java-1.8.0-openjdk

数据库环境

  • 一般 应用都需要有数据库支持,像MySQL,但一般在企业中会由运维或DBA提供

  • MySQL安装方法见附件中的《CentOS 7安装MySQL5.7》

准备其他工具

  • lrzsz,使用命令yum -y install lrzsz进行安装;安装后,可以使用命令

    • rz,命令将宿主机文件拷贝到Linux主机或虚拟机

    • sz,将Linux主机或虚拟机文件下载到宿主机

  • unzip,使用命令yum -y install unzip进行安装;安装后,可以对.zip类的压缩文件进行解压

    • unzip xxx.zip,解压到当前目录

【演示】

  1. 准备环境

打包

  • 使用Maven打包,在IDEA中右侧的Maven工具中,选择相应项目的Lifecycle的package功能将项目打包成.jar文件(也可使用mvn package命令)

  • 然后,在项目根目录的target目录下,就会生成一个jar包,名为:项目名称-版本.jar

  • 此包,即为发布包

  • 注意,.jar文件一般会比较大,包含了pom.xml描述依赖的.jar包和自运行的tomcat

【演示】

  1. 打包项目

发布

直接发布

  • 直接发布,就是直接运行.jar包运行程序,具体步骤如下

    1. 上传文件,将打包文件上传到指定环境的服务器,将打包的.jar文件上传到CentOS 7服务器上规划的目录中

    2. 添加外部配置,添加与环境配置匹配的外部配置,与在.jar文件同目录,配置相应环境的外部application.properties

    3. 运行程序,后台使用java命令运行.jar文件,项目即启动,命令格式为:java –jar xxx.jar

    4. 访问服务,启动后,可通过[http://IP:端口]直接访问服务;如果端口未开放,通过命令firewall-cmd --zone=public --add-port=端口号/tcp --permanent放开端口,并使用命令systemctl restart firewalld重启防火墙

  • 直接发布存在的问题

    • 实际工作中,需要多次发布,每次发布前要杀死原有进程

    • 需要配置指定日志,简单java –jar执行不能满足要求

    • 需要后台运行

【演示】

  1. 直接发布项目到CentOS 7服务器,使用附件中的代码下的发布包内文件,或自己打包项目发布

使用shell脚本发布

  • 先创建一个shell脚本文件,直接添加命令解决直接发布的问题

  • 涉及的命令

    • nohup:后台运行命令

    • ps:查看进程

    • grep:查找符合条件的字符串

    • awk:输出指定列

    • kill:杀死进程

    • echo:控制台输出信息

  • 其他常用命令

    • ll(ls –l):查看目录文件

    • tail –f:循环读取文件内容

  • 多次发布命令,替换上面的第3步运行程序,针对springboot-data-mybatis-plus.jar包,具体脚本内容如下(附件中的deploy.sh)

    • deploy.sh,发布shell脚本;可以使用附件中的文件,拷贝时,注意在Notepad++中使用Unix(LF)

      #!/bin/bash
      #包文件路径及名称(目录按照各自配置)
      APP_NAME=./springboot-data-mybatis-plus-0.0.1-SNAPSHOT.jar
      ​
      #日志文件路径及名称(目录按照各自配置)
      LOG_FILE=./springboot-data-mybatis-plus
      ​
      #查询进程,并杀掉当前jar/java程序
      pid=`ps -ef | grep $APP_NAME | grep -v grep | awk '{print $2}'`
      ​
      #判读进程id是否为,如果不为空,终止进程
      if [ -z "$pid" ]
      then
          echo $APP_NAME"已经被关闭。"
      else
          kill -9 $pid
          echo $pid"进程终止成功。"
      fi
      ​
      #判断jar包文件是否存在,如果存在启动jar包,并时时查看启动日志
      if test -e $APP_NAME
      then
          echo '文件存在,开始启动此程序...'
      ​
          #使用java命令运行jar包
          #nohup...&:表示在后台运行
          #-Xms、-Xmx:表示设置初始堆大小和最大堆大小
          #>>:指定日志输出位置和格式
          #-Xloggc:./gc.log > $LOG_FILE:包含gc日志的位置,与上一项可只配置一个
          #2>&1:表示标准错误也使用标准输出流;/dev/null 表示空设备文件;0 表示stdin标准输入;1 表示stdout标准输出;2 表示stderr标准错误
          nohup java -jar -Xms64m -Xmx128m $APP_NAME >> ./$LOG_FILE-`date +%Y-%m-%d`.log 2>&1 &
      ​
          #输出启动成功
          echo $APP_NAME'启动成功...'
      else
          echo '$APP_NAME 文件不存在,请检查。'
      fi
    • 使用sh命令运行shell脚本: sh ./deply.sh

    • 此时,就发布的是最新版本,可通过[http://IP:端口]直接访问服务

【演示】

  1. 使用shell脚本发布项目到CentOS 7服务器

通过Nginx输出服务

概述

  • 在很多企业的项目部署中,考虑到多负载、安全、性能等方面的需要,都会应用Nginx作为后端Web服务输出的反向代理服务器

  • Nginx主要作用有

    • HTTP服务器,一般用于输出前端项目

    • 反向代理服务器,隐藏后端真实Web服务地址和细节,提供统一服务

    • 负载均衡,高效的实现多台后端Web服务共同提供高可用服务

    • 虚拟主机,能将多个域名编写在同一个Nginx服务器上提供多种服务

安装

  • Nginx安装,具体见附件中工具目录下的《CentOS 7安装Nginx.docx》

使用

  • 安装好后,安装文件一般在/etc/nginx目录,主要的配置文件是nginx.conf

  • 如果要添加自己的虚拟主机,绑定域名,并提供服务,可在conf.d目录下添加xxx.conf格式的文件,然后重新加载并重启Nginx即可

输出后端服务步骤

目标:使用模拟域名api.springboot-data-mybatis-plus.com域名提供后端服务

  1. 部署后端Web服务:根据项目实际需要,可在多台主机上部署多套后端Web服务,使用上一节的的使用Shell脚本发布即可

  2. 配置Nginx服务器:具体配置见附件中的《springboot-data-mybatis-plus.conf》

    • 添加配置,将附件中的 springboot-data-mybatis-plus.conf拷贝到Nginx安装目录下的conf.d目录

    • 测试配置,使用命令:nginx -t,用于测试添加的配置是否符合Nginx的格式要求,如果返回successful,表示成功

    • 重新加载,使用命令:nginx -s reload

  3. 配置DNS(Domain Name Server):

    • 将已申请的域名绑定到Nginx服务器IP上,即可使用域名提供后端服务,一般由网络管理 员协调运营商实现

    • 由于是模拟域名,为模拟真实场景,可通过修改访问后端服务的主机hosts文件,实现模拟域名绑定到Nginx服务器IP实现效果

    • Windows操作系统的电脑在C:\Windows\System32\drivers\etc目录下hosts中进行上述修改

    • hosts配置示例如下

      #DNS映射配置,前面是要访问的nginx主机ip地址,后面是自定义的域名
      192.168.91.3 api.springboot-data-mybatis-plus.com
  4. 访问服务:在修改了hosts文件的主机,即可通过http://域名访问Nginx反向代理的后端服务

    注意:Swagger要动态配置host,见swagger.server.host配置节

502错误,(前端项目会是403错误)

  • 如果出现此错误,做如下处理

    • 方法一:关闭SELINUX;具体为

      • vi /etc/selinux/config,将SELINUX值修改为disabled,然后重启

    • 方法二:将自己的目录设置为httpd_sys_content_t类型,使用命令

      • 先安装命令:yum install policycoreutils-python

      • 然后执行命令:semanage fcontext -a -t httpd_sys_content_t '/ mydata / dist (/.*)?'

      • 最后执行restorecon -R /mydata/dist

【演示】

  1. 通过Nginx输出服务

部署到Tomcat服务器

概述

  • 有的企业有专门的Tomcat服务器,需要将Spring Boot应用部署到指定Tomcat服务器提供服务

  • 此时,就需要将Spring Boot项目中内嵌的Tomcat排除

  • 并将打包方式改为.war包

使用前准备

  • 需要在具备JDR(或JRE)的Linux物理主机或虚拟机上安装Tomcat

  • 具体安装步骤见附件中的《CentOS 7安装Tomcat.docx》

操作步骤

  1. 修改打包方式为war,在项目的pom.xml中,将项目类型配置packaging的值设置为war

  2. 移除嵌入式Tomcat,在pom.xml中,在spring-boot-starter-web依赖中排除内置的tomcat

  3. 添加单独的Tomcat依赖,在pom.xml中,单独添加编译期的tomcat依赖

  4. 修改启动类,让其继承于SpringBootServletInitializer,并覆写其中的configure方法

  5. 打war包,使用mvn package打包,此时生成的即为war包

  6. 将war包上传到Tomcat安装目录的webapps目录下并加载启动

    具体内容见附件Tomcat发布包中的springboot-data-mybatis-plus-tomcat中的【Tomcat部署】内容

【演示】

  1. 部署Spring Boot项目到Tomcat

    代码

    网盘地址:链接:https://pan.baidu.com/s/1QYC4MZZyK0g0IURKCaQAow?pwd=8888

标签:11,文件,Tomcat,命令,Spring,Boot,jar,Nginx,使用
From: https://www.cnblogs.com/sangrei/p/18239990

相关文章

  • Spring Boot入坑-12-项目实战
    目标掌握后端项目整体架构搭建,掌握从0到1构建一个完整项目巩固已学习的后端技术,覆盖Java基础、SpringBoot的主要课程内容,包括但不限:序列化、反射、注解、泛型、Lambda、Stream、REST、Interceptor、数据访问、Swagger等等一些扩展内容的学习,比如登录、密码加密、项目部......
  • Spring Boot入坑-10-Git
    简介一个开源的分布式版本控制系统基于Git协议的代码托管平台主要有Github和Gitlab,国内的也有比如Gitee比较多的企业使用Gitlab构建自己的代码托管平台其主要作用是,对代码或文档进行版本化记录与控制主要概念工作区:个人电脑中能看到的项目的目录暂存区:数据暂......
  • 基于springboot+vue.js+uniapp小程序的流浪猫狗救助救援网站附带文章源码部署视频讲解
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaits系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • Pytorch GPU版环境搭建 CUDA11.2
    简单记录下~参考:深度学习环境配置超详细教程【Anaconda+Pycharm+PyTorch(GPU版)+CUDA+cuDNN】pythonpytorch-GPU环境搭建(CUDA11.2)版本概览Python3.8CUDA11.2cuDNN8.1.1torch1.9.1torchvision0.10.1torchaudio0.9.1CUDA判断自己应该下载什么版本的cu......
  • SpringBoot实现上传头像(查看头像)
    SpringBoot实现上传头像给功能和查看头像功能文章目录目录文章目录1.上传头像1.这里的AppConfig记得定义一下 2.引入AppConfig3.上传文件代码 2.获取头像 1.实现readFile方法1.上传头像首先我的代码中在application.properties中设置了上传文件的根目录......
  • Redis-11-Redis与Mysql的数据一致性
    1.是什么数据一致性呢,讲的就是缓存中的数据和db中的数据是否能一致。2.为什么先看我这篇文章,了解下缓存策略:Redis-6-三种缓存读写策略在文章中,介绍了并发场景下的一致性问题,我们已经确定了一个基本思路:先更新db,再删除缓存。这个方案,奠定了我们在读写操作时的基本思路。2.1......
  • SpringBoot社区配送服务系统小程序-计算机毕业设计源码88705
    摘要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,社区当然也不例外。社区配送服务系统小程序是以实际运用为开发背景,运用软件工程原理和开发方法,采用Java技术构建的一个管理系统。整个开发过程首先对软件系统进......
  • 1164. 指定日期的产品价格
    1164.指定日期的产品价格题目链接:1164.指定日期的产品价格代码如下:#WriteyourMySQLquerystatementbelowselectp1.product_id,ifnull(new_price,10)aspricefrom(selectdistinctproduct_idfromProducts)asp1--所有的产品leftjoi......
  • 11 深入理解Linux文件系统与日志分析
    目录11.1深入理解Linux文件系统    11.1.1inode与block详解        1.inode和block概述        2.inode的内容        3.inode的号码        4.inode的大小    11.1.2硬链接与......
  • SpringCloud-OpenFeign拓展-连接池、最佳使用方法、日志输出
    目录1OpenFeign连接池1.1常见连接类型1.2连接池使用方法1.2.1引入依赖1.2.2开启连接池功能1.2.3配置完成,重启实例即可,底层将更改设置。2OpenFeign最佳使用方法2.1每个微服务都是单独的project,内部有三个独立模块2.2每个微服务都是一个module,一个project,内设......