SpringBoot进阶之服务部署

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
.cn 域名,1个 12个月
简介: 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为基础搭建的,我们学习只是学习它的各大组件还有如何灵活的运用到场景中。没有微服务基础也没关系,我会带着大家一步一步入门,从理论到实战,尽可能的讲全。关注我,不迷路,下期见~

相关文章
|
4月前
|
Java Spring
Spring boot 运行服务jar外配置配置文件方式总结
Spring boot 运行服务jar外配置配置文件方式总结
927 0
|
1月前
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
1月前
|
JSON Java 网络架构
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
这篇文章介绍了如何使用Spring Boot整合REST方式来搭建和操作Elasticsearch服务。
122 4
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
|
1月前
|
数据可视化 Java 应用服务中间件
springboot打war包,成功部署
这篇文章介绍了如何将Spring Boot项目打包成WAR文件,并成功部署到Tomcat服务器的详细步骤。
118 0
springboot打war包,成功部署
|
2月前
|
缓存 前端开发 Java
springboot 的单体服务 字典参数转译
本文介绍了如何在Spring Boot项目中使用缓存来管理字典参数,并确保前后端数据一致性。首先,通过`@EnableCaching`启用缓存功能,接着创建一个自定义的字典缓存类`DicCache`。然后,通过配置类将`DicCache`添加到`cacheManager`中。此外,对字典服务进行改造,使用`@CachePut`和`@CacheEvict`注解保证数据一致性。最后,实现自定义注解`@DicSerializer`和序列化处理类`DictSerializerHandel`,用于在序列化过程中自动转换字典值。通过这种方式,可最小化代码改动并提高系统性能。
springboot 的单体服务 字典参数转译
|
1月前
|
监控 Dubbo Java
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
这篇文章详细介绍了如何将Spring Boot与Dubbo和Zookeeper整合,并通过Dubbo管理界面监控服务注册情况。
81 0
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
|
1月前
|
自然语言处理 Java Maven
elasticsearch学习二:使用springboot整合TransportClient 进行搭建elasticsearch服务
这篇博客介绍了如何使用Spring Boot整合TransportClient搭建Elasticsearch服务,包括项目创建、Maven依赖、业务代码和测试示例。
95 0
elasticsearch学习二:使用springboot整合TransportClient 进行搭建elasticsearch服务
|
2月前
|
缓存 Java 应用服务中间件
随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架
【9月更文挑战第6天】随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架。Nginx作为高性能的HTTP反向代理服务器,常用于前端负载均衡,提升应用的可用性和响应速度。本文详细介绍如何通过合理配置实现Spring Boot与Nginx的高效协同工作,包括负载均衡策略、静态资源缓存、数据压缩传输及Spring Boot内部优化(如线程池配置、缓存策略等)。通过这些方法,开发者可以显著提升系统的整体性能,打造高性能、高可用的Web应用。
74 2
|
3月前
|
小程序 JavaScript Java
微信小程序+SpringBoot接入后台服务,接口数据来自后端
这篇文章介绍了如何将微信小程序与SpringBoot后端服务进行数据交互,包括后端接口的编写、小程序获取接口数据的方法,以及数据在小程序中的展示。同时,还涉及到了使用Vue搭建后台管理系统,方便数据的查看和管理。
微信小程序+SpringBoot接入后台服务,接口数据来自后端
|
3月前
|
Java Windows
SpringBoot Windows 自启动 - 通过 Windows Service 服务实现
SpringBoot Windows 自启动 - 通过 Windows Service 服务实现
120 2