【Java开发】 Spring 11 :Spring Boot 配置 Web 运行参数并部署至服务器

news2024/11/28 0:35:33

Spring Boot 项目开发结束后的工作便是运维,简单来说需要配置 Web 运行参数和项目部署两大工作,本文将尽可能详细地给大家讲全!

目录

1 定制 Web 容器运行参数

1.1 运行参数介绍

1.2 项目搭建

① 通过 IDEA Spring Initializr 创建项目

② 添加 Spring Web 等依赖

③ 编写 controller 层的接口

④ 测试接口

1.2 定制运行参数

① 配置压缩支持 + 报错处理

② 报错处理

③ 压缩支持

2 将应用以 Jar 包形式部署至服务器

2.1 云服务器安装 JDK8

① 下载 linux 版本下的 jdk

② 上传至指定文件夹并解压

③ 配置环境变量

④ 验证

2.2 以 jar 包形式将 Spring Boot 项目部署到云服务器

① 添加maven依赖

② 通过 idea 打包项目

③ 项目上传到服务器

④ 在服务器运行 jar 文件

⑤ 云服务器防火墙设置

⑥ 浏览器访问

3 将应用以 Docker 镜像文件形式部署至服务器

3.1 Dockerfile 文件

① 新建 Dockerfile 文件

② 将 Dockerfile 文件上传至服务器

3.2 以  Dockerfile 文件形式将 Spring Boot 项目部署到云服务器 

① 将项目打包成 jar 并放到服务器

② 在当前目录下运行指令,构建镜像

③ 运行镜像并检验


项目源码:尹煜 / rundemo · GitCode

1 定制 Web 容器运行参数

1.1 运行参数介绍

Ⅰ 可选容器列表

其实 Spring Boot 不仅支持 Tomcat,还支持 jetty、undertow 等容器,本项目采用的是 Tomcat ,若要更换容器,需要将 spring-boot-starter-tomcat 从 Web 的 starter 里去掉,然后引入像 jetty 这样的 starter ~

  • spring-boot-starter-tomcat
  • spring-boot-starter-jetty
  • spring-boot-starter-undertow
  • spring-boot-starter-reactor-netty

Ⅱ 端口

  • server.port:指定端口号
  • server.address:指定地址

Ⅲ 压缩支持

  • server.compression.enabled=true:开启压缩支持
  • server.compression.min-response-size:设置最小需要压缩的大小 默认为2t
  • server.compression.mime-types:设置默认压缩的类型

Ⅳ Tomcat 特定配置

  • server.tomcat.max-connections=10000:最大连接数
  • server.tomcat.max-http-post-size=2MB:设置post参数字符串大小
  • server.tomcat.max-swallow-size=2MB:请求正文的最大大小
  • server.tomcat.max-threads=200:最大线程数量
  • server.tomcat.min-spare-threads=10:最小空闲线程数

Ⅴ 错误处理

  • server.error.path=/error:错误页地址
  • server.error.include-exception=false:是否在错误页面显示异常信息
  • server.error.include-stacktrace=never:是不是要打出 stacktrace(堆栈轨迹),在开发环境中可以打开 在产线上不要打开
  • server.error.whitelabel.enabled=true:是否开启默认的错误页面

Ⅵ 其他

  • server.use-forward-headers:设置一些头,通过头传递真实的来源ip
  • server.servlet.session.timeout:设置 session 的超时

Ⅶ 通过编程方式

通过WebServerFactoryCustomizer<T>做一些定制,在 1.3 可以看到

  • TomcatServletWebServerFactory
  • JettyServletWebServerFactory
  • UndertowServletWebServerFactory

1.2 项目搭建

由于只是用作演示 Web 容器运行和部署,因此本项目很简单,写了几个简单的接口,而且也不连接数据库,以下是项目搭建的流程。

① 通过 IDEA Spring Initializr 创建项目

② 添加 Spring Web 等依赖

③ 编写 controller 层的接口

由于项目不做数据库相关操作,所以直接编写接口~

路径:src/main/java/com/rundemo/controller/UserController.java

package com.rundemo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/run")
public class UserController {


    @RequestMapping("/visit/{userId}")
    public int allUser(@PathVariable("userId") int id) {
        return 2/id;
    }

    @RequestMapping("/demo")//模拟下实体内容返回
    public Map<String, String> queryUser() {
        Map<String, String> map = new HashMap<>();
        map.put("id","1");
        map.put("name","yinyu");
        map.put("status","ok");
        return map;
    }
    
}

④ 测试接口

首先启动启动类 👇

然后用 Termimal 终端进行访问,直接用浏览器也可~

返回成功,还附带了很多其他信息,包括状态、请求头等 👇

1.2 定制运行参数

首先展示一下项目框架 👇,很清爽~

① 配置压缩支持 + 报错处理

本文以压缩支持和报错处理为例

路径:src/main/resources/application.properties

#压缩支持
server.compression.enabled=true
server.compression.min-response-size=512

#报错处理
server.error.include-stacktrace = always
server.error.include-exception = true

路径:src/main/java/com/rundemo/RundemoApplication.java

package com.rundemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.TimeZone;

@SpringBootApplication
public class RundemoApplication  implements WebMvcConfigurer,WebServerFactoryCustomizer<TomcatServletWebServerFactory> {

    public static void main(String[] args) {
        SpringApplication.run(RundemoApplication.class, args);
    }


    @Override //压缩配置,在application.properties和启动类选择一个配置即可
    public void customize(TomcatServletWebServerFactory factory) {
//        Compression compression = new Compression(); //压缩的配置
//        compression.setEnabled(true);//开启压缩
//        compression.setMinResponseSize(DataSize.ofBytes(200));// 设置最小需要压缩的大小
//        factory.setCompression(compression);//将配置传入
    }


    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jacksonBuilderCustomizer() {
        return builder ->
                builder.indentOutput(true)
                        .timeZone(TimeZone.getTimeZone("Asia/Shanghai"));
    }

}

② 报错处理

首先启动项目的启动类,然后正常访问 /run/visit/1 接口,正确返回 👇

访问 /run/visit/0,此时预期会报错,因为分母无法为0,那么以下正确返回报错信息 👇,不过不建议在生产环境如下配置哈

③ 压缩支持

还是启动一下那个启动类,通过浏览器访问接口,打开 F12,切换到 NetWork 下,右键表头选择 Response Headers 下的Content-Encoding,如果开启了 Gzip,对应接口中的Content-Encoding中会有显示。

未压缩时:

压缩后,体积减小,Content-Encoding 也更新为 Gzip 👇

2 将应用以 Jar 包形式部署至服务器

部署springboot项目到云服务器的两种方式(jar+war)_倔强的Zero猪的博客-CSDN博客_springboot部署到服务器

如何将springboot项目打包成jar包并部署到服务器上_SHUKAI618的博客-CSDN博客

2.1 云服务器安装 JDK8

① 下载 linux 版本下的 jdk

网盘链接: jdk-8u171-linux-x64.tar.gz 网盘链接

② 上传至指定文件夹并解压

MobaXterm 中文版链接:MobaXterm中文版网盘链接

我通过 MobaXterm 工具将 jar 文件放到 home/java 目录下(也可根据需要使用rz命令、FileZilla工具等方式)

接下来就是切换到该目录下并解压👇

解压命令:tar -xvf jdk-8u171-linux-x64.tar.gz

再次查看该目录下的文件,红框内说明解压成功 👇

③ 配置环境变量

编辑文件命令:vi /etc/profile

在文件末尾加上 jdk 配置:

export JAVA_HOME=/home/java/jdk1.8.0_171   
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:
export PATH=${JAVA_HOME}/bin:$PATH

i  1、进入编辑模式
esc 2、退出编辑模式 
:wq! 3、退出保存

编辑保存后 cat 查看该文件,末尾已加上 jdk 配置 👇

刷新配置文件,让配置生效:source /etc/profile

④ 验证

验证命令:java -version

2.2 以 jar 包形式将 Spring Boot 项目部署到云服务器

① 添加maven依赖

    <groupId>com</groupId>
    <artifactId>rundemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

② 通过 idea 打包项目

在控制台中看到有如下输出则表示输出成功 👇

package 会将 Maven 工程打包成一个可执行的 jar 文件存放在 target 目录下

③ 项目上传到服务器

通过 MobaXterm 工具将 jar 文件 media/ 目录下

④ 在服务器运行 jar 文件

首先切换到 jar 文件所在目录

然后执行命令:java -jar rundemo.jar

⑤ 云服务器防火墙设置

由于我用的是腾讯云服务器,还需要开放 8080 端口~

⑥ 浏览器访问

注意和在本地电脑运行相比,只需将 ip 地址换成服务器的即可,端口号(默认8080)和路径名都是与本地一致,也可自行配置

访问返回成功 👇

报错也返回成功 👇

最后 ctrl +c 就结束进程了~

3 将应用以 Docker 镜像文件形式部署至服务器

目前将 SpringBoot 项目打包成 Docker 镜像主要有两种方案

  • 全自动化 :在项目的 pom文件/maven配置里配置好镜像仓库地址,并在项目配置Dockerfile文件,这样项目在idea中打包完成后可自动上传到镜像仓库,docker 直接启动该镜像就行了
  • 半自动化:将 SpringBoot 项目打包成普通的 jar 包,将该 jar 包上传至服务器,在同目录下创建一个 Dockerfile 文件,执行 docker build 命令,将这个 jar 包构建成一个 docker 镜像,然后就可以通过 docker 运行这个镜像了

一般来说半自动化较为普遍,本文采用第二种方式

3.1 Dockerfile 文件

Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释。

① 新建 Dockerfile 文件

Dockerfile 文件是文本文档,不需要后缀,目录依据在服务器的具体位置

# java8运行环境
FROM java  
# 作者名称
MAINTAINER yinyu
 
# 切换工作目录
WORKDIR /media
 
# 添加rundemo.jar文件到docker环境内
ADD rundemo.jar /media/rundemo.jar
# 暴露端口8080
EXPOSE 8080
# 运行命令
ENTRYPOINT ["java", "-server", "-Xms512m", "-Xmx512m", "-jar", "/media/rundemo.jar"]

② 将 Dockerfile 文件上传至服务器

3.2 以  Dockerfile 文件形式将 Spring Boot 项目部署到云服务器 

① 将项目打包成 jar 并放到服务器

步骤参考本文的2.2小节,是一样的

② 在当前目录下运行指令,构建镜像

后边一个“.”,代表当前路径

docker build -t rundemo:0.0.1 .

通过 docker images 命令,查看镜像已创建成功

③ 运行镜像并检验

docker run -p 8080:8080 -t rundemo:0.0.1

浏览器访问,只需将 ip 地址换成服务器的即可,端口号(默认8080)和路径名都是与本地一致,也可自行配置,访问成功 👇

此时需要 docker stop rundemo:0.0.1 命令来停止 Spring Boot 项目的运行~


参考文章

docker系列之打包spring boot 项目成docker镜像__shan123的博客-CSDN博客_springboot打包docker镜像

如何定制 Web 容器的运行参数_L# S@的博客-CSDN博客_怎么web设置容器运行参数

部署springboot项目到云服务器的两种方式(jar+war)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/91941.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用nginx代理服务器上的docker容器接口

假如项目通过自动化部署在了docker容器里面&#xff1a;教程在这里vue使用dockernodenginxlinux自动化部署_1024小神的博客-CSDN博客 怎么将nginx通过域名绑定到这个容器呢&#xff1f; 例如我们将一个二级域名绑定second.1024shen.com/#/ 到我们的服务 我们需要先在域名解析…

阿里P8专家整理的面试秘籍,我看了三个月,成功入职京东,税前30K

入职京东&#xff0c;月薪30K 今年三月份的时候&#xff0c;我从上一家外包公司裸辞。那时正值疫情期间&#xff0c;实在受不了公司的压迫&#xff0c;毅然决然的选择了离职。 卧薪尝胆三个月后&#xff0c;才收到京东的offer&#xff0c;谈到了30k的月薪顺利入职。 本来那时…

DPDK源码分析之l2fwd

什么是L2转发 2层转发&#xff0c;即对应OSI模型中的数据链路层&#xff0c;该层以Mac帧进行传输&#xff0c;运行在2层的比较有代表性的设备就是交换机了。 当交换机收到数据时&#xff0c;它会检查它的目的MAC地址&#xff0c;然后把数据从目的主机所在的接口转发出去。 交…

SSM 学习管理系统

SSM 学习管理系统 SSM 学习管理系统 功能介绍 首页 图片轮播展示 网站公告 学生注册 教师注册 课程资料 视频学习 友情链接 资料详情 学习进度 评论 收藏 后台管理 登录 管理员管理 修改密码 网站公告管理 友情链接管理 轮播图管理 学生管理 班级管理 我的班级管理 教师管理…

微信小程序 | 小程序的内置组件

&#x1f5a5;️ 微信小程序专栏&#xff1a;微信小程序 | 小程序的内置组件 &#x1f9d1;‍&#x1f4bc; 个人简介&#xff1a;一个不甘平庸的平凡人&#x1f36c; ✨ 个人主页&#xff1a;CoderHing的个人主页 &#x1f340; 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️…

【轻量级开源ROS 的机器人设备(4)】--(3)通信实现

前文链接 【轻量级开源ROS 的机器人设备&#xff08;4&#xff09;】--&#xff08;2&#xff09;通信实现_无水先生的博客-CSDN博客 六、数据流 数据流 虽然 XML-RPC 为远程方法调用提供了一种简单而干净的协议&#xff0c;但其冗长和以文本为中心的编码使其不适合高带宽和低…

手把手分享:如何将小程序游戏引入自有APP?(Android篇)

上一期的为大家分享了&#xff1a;如何在iOS中引入FinClip SDK&#xff0c;并将小程序游戏运行到自有App 中。点击查看&#xff1a;&#x1f449;手把手系列&#xff1a;如何将小程序游戏引入自有APP&#xff1f;&#xff08;iOS篇&#xff09; 本周继续分享如何在Android系统…

小红书如何做推广增粉?怎样让小红书快速增加粉丝?

互联网时代&#xff0c;任何什么平台的推广都需要流量&#xff0c;没有流量的账号是做不起来的&#xff0c;也就没有宣传或是转化的效果。 小红书账号粉丝数量和权重是成正比的&#xff0c;涨粉越多的账号&#xff0c;说明越受到用户的喜欢&#xff0c;账号笔记的数据就会越好…

5G“新引擎”,助力矿山向无人化、智慧化转型

导语 | 5G 商用已过去三年&#xff0c;其发展已步入规模化应用的关键期。无论是在诸如矿山、港口远程驾驶的行业应用领域&#xff0c;还是在面向C端的智能汽车、自动驾驶方面&#xff0c;都得到了广泛应用。今天&#xff0c;我们特邀了三一智矿的董事长、腾讯云 TVP 行业大使马…

java面试强基(23)

什么是线程死锁?如何避免死锁? ​ 线程死锁描述的是这样一种情况&#xff1a;多个线程同时被阻塞&#xff0c;它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞&#xff0c;因此程序不可能正常终止。 上面的例子符合产生死锁的四个必要条件&#xff1…

提高短视频的收藏下载和转发率的方法,我们可以不做但不能不会

想要提高收藏和下载&#xff0c;那就要提高你内容的价值感和获得感。 我们要清晰的知道收获感不等同于真正的收获。那我们的做法就是给出冗余的有用&#xff0c;给出熟悉的陌生&#xff0c;给出精准的表达。那这是提高收藏转发的方法。 我们看到好看的视频&#xff0c;想分享视…

Hack the box -- Responder靶机

这个靶机记录一下。。感觉会用到。 任务1 当使用IP地址访问web服务时&#xff0c;我们被重定向到的域是什么? 这里我们访问一下ip&#xff0c;然后重定向了 FLAG:unika.htb 任务2 服务器上使用哪种脚本语言生成网页? 这里因为重定向域的问题&#xff0c;我们是访问不了的会报…

408 | 【2022年】计算机统考真题 自用回顾知识点整理

一、数据结构 T1:时间复杂度 ——直接求程序执行的次数 T5:哈夫曼树(最优二叉树)与哈夫曼编码 定义 结点带权路径长度:从根到任一节点的路径长度(经过的边数)与该结点权值的乘积树的带权路径长度WPL:所有叶节点的带权路径长度之和 哈夫曼树:WPL最小的二叉树哈夫曼树的…

PHPMailer发送邮件(PHP发送电子邮件)

很多网站注册时都会要求输入电子邮箱&#xff0c;其应用场景是比较广的&#xff0c;例如注册账号接收验证码、注册成功通知、登录通知、找回密码验证通知等。本文将介绍如何使用PHP实现发送邮件。 开源项目PHPMailer 使用了开源项目PHPMailer&#xff0c;本文使用163邮箱作为…

挑战一天速通python基础语法

挑战一天速通python基础语法 文章目录挑战一天速通python基础语法0. 防止某人健忘1. 一些小点2. 输入输出2.1 输出2.2 输入3. 一些基础语法3.1 条件语句3.2 循环语句3.3 空语句4. 函数5. 列表和元组5.1 列表5.2 元组6. 字典7. 文件操作再有一个月参加一个NTU的线上科研项目。。…

MicroPython-On-ESP8266——8x8LED点阵模块(5)自制贪吃蛇游戏

MicroPython-On-ESP8266——8x8LED点阵模块&#xff08;5&#xff09;自制贪吃蛇游戏 1. 背景知识 连续折腾了一段时间的8x8点阵屏模块&#xff0c;从基本原理到驱动它显示滚动图案效果&#xff0c;常用的功能都使用到了。系列如下&#xff1a; MicroPython-On-ESP8266——8…

文件下载漏洞详解

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是文件下载漏洞详解。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严禁对未授权设备…

速锐得视角—数字化能源新时代的影响挑战趋势

数字化正在改善能源系统的安全性、生产力、普及率和可持续性&#xff0c;但是同时数字化也引发了新的安全和隐私风险&#xff0c;此外&#xff0c;市场、企业和工作岗位也受数字化的影响&#xff0c;改变工种结构&#xff0c;在数字化新时代来临前&#xff0c;正在发生一些细微…

计算机毕业设计java+springboot+vue学生宿舍管理系统

项目介绍 通篇文章的撰写基础是实际的应用需要,然后在架构系统之前全面复习大学所修习的相关知识以及网络提供的技术应用教程,以学生宿舍管理系统的实际应用需要出发,架构系统来改善现学生宿舍管理系统及出入登记平台工作流程繁琐等问题。不仅如此以操作者的角度来说,该系统的…

数字IC验证快速入门,你想知道的干货都在这里

网上有很多人咨询关于数字IC验证的行情&#xff0c;下面大多数回答都说薪资高、机会多、发展好。 确实&#xff0c;一款芯片从立项到流片生产需要经过层层自测和验证&#xff0c;否则芯片注定是失败。可以说&#xff0c;IC验证是IC设计的关键所在。 验证的重要性 这些年来&a…