SpringBoot进阶之服务部署

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: SpringBoot进阶之服务部署

前言

大家好,一直以来我都本着用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 基础知识 的铺垫。目前正在出一个SpringBoot长期系列教程,从入门到进阶, 篇幅会较多~


适合人群

  • 学完Java基础
  • 想通过Java快速构建web应用程序
  • 想学习或了解SpringBoot
  • SpringBoot进阶学习

大佬可以绕过 ~


背景

如果你是一路看过来的,很高兴你能够耐心看完。之前带大家学了Springboot基础部分,对基本的使用有了初步的认识, 接下来的几期内容将会带大家进阶使用,会先讲解基础中间件的使用和一些场景的应用,或许这些技术你听说过,没看过也没关系,我会带大家一步一步的入门,耐心看完你一定会有收获~


情景回顾

前几期呢,带大家学习了SpringBoot的进阶教程。当我们的代码写好了,需要发布到服务器上给用户访问,这期将带大家快速的部署我们的Java应用服务, 同样的,我们集成到Springboot中。


分环境打包

发布之前,最重要的事情是需要我们去打包我们的程序,这样服务器才能够运行它。打包之前呢,教大家先把本地的环境区分好,先修改pom.xml, 在build 下加入如下配置

<profiles>
    <profile>
        <!--不同环境的唯一id-->
        <id>dev</id>
        <activation>
            <!--默认激活开发环境-->
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <!--profile.active对应application.yml中的@profile.active@-->
            <profile.active>dev</profile.active>
        </properties>
    </profile>
    <!--生产环境-->
    <profile>
        <id>prod</id>
        <properties>
            <profile.active>prod</profile.active>
        </properties>
    </profile>
</profiles>
复制代码

刷新一下,我们会发现右侧Maven展开后多了一个配置文件,展开后它是一个单选,这就是我们的环境配置文件,选哪个代表打的包是哪个环境下的。


还需要做一件事情就是和我们的SpringBoot配置进行关联:

spring:
  profiles:
    active: @profile.active@
复制代码


@profile.active@这个值就是动态去获取的,它可以是通过我们刚刚配置的配置文件里的值,还有就是可以通过命令行参数去获取, 下面我们只需要分开建立配置文件即可, 命名方式 application-${profile}.yml, 这样一来,我们application.yml中的配置可以拆到外边了,只需要保留公共部分, 一般情况下我们做配置区分实际上大部分都是对数据源,服务端端口,请求前缀等做区分,数据源比如mysql,redis等等

  • application.yml
spring:
  profiles:
    active: @profile.active@
mybatis:
  mapper-locations:
    - classpath:mapper/*.xml
  configuration:
    cache-enabled: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
复制代码


  • application-dev.yml
server:
  port: 8878 # 设置应用端口,默认是8080
  tomcat:
    max-threads: 800
    uri-encoding: UTF-8
  servlet:
    context-path: /dev-api
spring:
  application:
    name: app-shiro
  datasource:
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
    username: root
    password: xxxx
  redis:
    host: localhost # Redis服务器地址
    database: 1 # Redis数据库索引(默认为0)
    port: 6379 # Redis服务器连接端口
    password: # Redis服务器连接密码(默认为空)
复制代码


  • application-prod.yml
server:
  port: 8888 # 设置应用端口,默认是8080
  tomcat:
    max-threads: 800
    uri-encoding: UTF-8
  servlet:
    context-path: /
spring:
  application:
    name: app-shiro
  datasource:
    url: jdbc:mysql://xxx.xxx.xxx.xxx:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
    username: xxx
    password: xxxxxxx
  redis:
    host: xxxxx # Redis服务器地址
    database: x # Redis数据库索引(默认为0)
    port: 6379 # Redis服务器连接端口
    password: xxxx # Redis服务器连接密码(默认为空)
复制代码


编译Jar包

我们部署方式以Jar包为主,下面我们就去编译它,借助idea工具我们很方便的就可以打包了,点击右侧Maven, 然后点击生命周期, 我们先双击clean,然后双击install,这样就可以了,控制台会有打包信息,出现SUCCESS代表成功了,那么编译后的产物在哪呢, 在对应模块下的target文件夹下, 它有一个.jar后缀的文件,那个就是我们的jar包了


服务部署

下面,就教大家如何部署到服务器上,首先服务器需要安装nginx用于代理我们的java服务, 因为我们不会像在本地一样通过端口访问的,都是要通过域名去访问所以推荐大家使用nginx, 其次还需要安装java8, 下面直接给大家贴命令,我们默认服务器系统是CentOs 7

# 安装nginx
yum install nginx
# 设置开启启动
systemctl enable nginx
systemctl start nginx
# 安装java
yum install java
复制代码


安装好了之后,我们先配置nginx, 修改/etc/nginx.conf

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
  charset utf-8;
  location /prod-api/ {
   proxy_set_header Host $http_host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header REMOTE-HOST $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   # 这就是我们要代理的服务端口 也就是sprinboot的启动端口
   proxy_pass http://localhost:8888/;
  }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
复制代码

这里根据自身来,如果有域名可以把 localhost 改成域名, 没有也可以改成公网的ip做测试,如果是域名需要到具体的域名服务商解析到服务器的公网ip,也就是A记录


发布jar包

下面需要把我们本地编译好的jar包部署到我们的服务器上,我们可以通过ftp工具去上传到服务器,哪个目录可以自己定,我这里上传到/home/java/下, 工具推荐filezila,windows用户可以使用xftp,这个也不错(只有window版本),因为我是mac,所以我使用的是filezila


然后我们链接它就完事了,好了之后我们到对应目录,把本地的jar包直接拖进去就完事~


运行SpringBoot服务

我们的包已经发上来了,下边我们就一起动手运行它,这里给大家准备好了一个简要的start.sh

# 这个意思后台运行 并把日志输出到知道文件 
nohup java -jar app.jar >> app.log  2>&1 &
复制代码


实际上我们运行jar包通过java -jar xxxx.jar,但是没法后台运行,也就是说关闭远程链接后,就自动挂掉了


这里要说的是,我们执行需要到jar包同级目录中,好,我们把这个start.sh文件也发到home/java/,下面我们通过shell工具远程链接我们的服务器,windows用户可以使用Xshell


链接好后,执行一下命令:

# 赋予可执行权限
chmod 777 start.sh
# 执行脚本
./start.sh
复制代码


大家可以自己访问,测试一下,哦,修改完nginx配置一定记得热重启一下, 不然配置不生效哦!~

nginx -s reload
复制代码


结束语

以上只针对测试环境,其实现在的环境部署都比较成熟了,一般小项目你可以这么玩,但是大项目就不行了,因为我们的进程没法自主恢复,就是说意外的挂了,他不能自愈,我们可以借助守护进程工具,比如supervisor这样的,这里就不给大家演示了。现在的部署都是逐渐向容器化靠拢了,后边会教大家高级的,比如docker的部署方式,教大家如何打镜像和部署,等到讲```docker``的时候会教大家~


下期预告

到此为止,我们的SpringBoot进阶系列教程就结束了,下周我们正式开启SpringCloud微服务之旅,如果对SpringBoot还不够熟悉的,请看完之前的教程哦,不然学习很费劲,因为我们的微服务都是以SpringBoot为基础搭建的,我们学习只是学习它的各大组件还有如何灵活的运用到场景中。没有微服务基础也没关系,我会带着大家一步一步入门,从理论到实战,尽可能的讲全。关注我,不迷路,下期见~

相关文章
|
1月前
|
XML Java 应用服务中间件
SpringBoot-打包&部署
SpringBoot 项目支持两种打包方式:WAR 包和 JAR 包。JAR 包内置 Tomcat,可直接运行;WAR 包需部署在外部 Tomcat 上。JAR 包通过 `mvn clean package` 打包并用 `java -jar` 运行,支持后台运行和 JVM 参数配置。WAR 包需修改 pom.xml 为 war 类型,移除嵌入式 Tomcat 依赖,添加 servlet-api,并继承 `SpringBootServletInitializer`。配置文件可通过外部 application.yml 覆盖,默认优先级高于 JAR 内部配置。
87 17
SpringBoot-打包&部署
|
4月前
|
Java 应用服务中间件 Maven
如何将 Spring Boot 应用程序部署为 WAR?
如何将 Spring Boot 应用程序部署为 WAR?
261 1
|
2月前
|
JavaScript 搜索推荐 Java
基于SpringBoot+Vue实现的家乡特色推荐系统设计与实现(源码+文档+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
2月前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生就业服务平台设计与实现(系统源码+文档+数据库+部署等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
2月前
|
JavaScript Java 测试技术
基于Java+SpringBoot+Vue实现的车辆充电桩系统设计与实现(系统源码+文档+部署讲解等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
2月前
|
JavaScript NoSQL Java
基于SpringBoot+Vue的班级综合测评管理系统设计与实现(系统源码+文档+数据库+部署等)
✌免费选题、功能需求设计、任务书、开题报告、中期检查、程序功能实现、论文辅导、论文降重、答辩PPT辅导、会议视频一对一讲解代码等✌
|
2月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的高校食堂移动预约点餐系统设计与实现(源码+文档+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
2月前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生体质测试管理系统设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
2月前
|
Java 测试技术 应用服务中间件
Spring Boot 如何测试打包部署
本文介绍了 Spring Boot 项目的开发、调试、打包及投产上线的全流程。主要内容包括: 1. **单元测试**:通过添加 `spring-boot-starter-test` 包,使用 `@RunWith(SpringRunner.class)` 和 `@SpringBootTest` 注解进行测试类开发。 2. **集成测试**:支持热部署,通过添加 `spring-boot-devtools` 实现代码修改后自动重启。 3. **投产上线**:提供两种部署方案,一是打包成 jar 包直接运行,二是打包成 war 包部署到 Tomcat 服务器。
56 10
|
2月前
|
Java 应用服务中间件
SpringBoot工程打包部署
SpringBoot工程打包部署简介:SpringBoot项目可通过三种方式运行:可执行Jar包、可执行War包和标准War包。其中,可执行Jar/War包可独立运行,标准War包需部署在Tomcat中。具体步骤包括:1. 修改pom.xml添加构建依赖;2. 执行`mvn clean package`命令打包;3. 运行生成的Jar/War包(如`java -jar xxx.jar`)。对于标准War包,还需修改启动类并配置Tomcat依赖。