7.【SpringBoot3】项目部署、属性配置、多环境开发

1. SpringBoot 项目部署

项目完成后,需要部署到服务器上。

SpringBoot 项目需要经过编译打包生成一个 jar 包(借助打包插件 spring-boot-maven-plugin),再将该 jar 包发送或拷贝到服务器上,然后就可以通过执行 java -jar jar包位置 来运行 jar 包。
服务器的系统可能是 windows、mac、linux。

在这里插入图片描述

(1) 在 pom.xml 中导入打包插件

<build><plugins><plugin><!--打包插件: 版本与boot版本保持一致--><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>3.1.5</version></plugin></plugins>
</build>

(2) 将项目打包,双击 package

在这里插入图片描述

项目会经过编译、测试,最终打包完成:

在这里插入图片描述

打包完成后得到的 jar 包:

在这里插入图片描述

在本地磁盘目录下打开 jar 包所在位置:

在这里插入图片描述

现在按说要将该 jar 包发送到服务器,再执行 java -jar 命令。这里就不再发送到服务器了,直接把本机当成服务器运行 jar 包(此前要停止 idea 中的项目占用默认的 8080 端口)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

此时,项目就部署好了,postman 测试正常。

2. 属性配置方式

如果希望部署好的项目绑定的端口是 9090,而不是默认的 8080,该怎么办呢?

根据之前的知识,可以在 properties 或 yml 配置文件中通过 server.port 来配置。

但是我们交给客户或运维的是 jar 包,而不是项目源文件,所以他们无法直接修改这些属性。那怎么办呢?此时就要用到 SpringBoot 属性配置相关知识了。

之前我们配置属性的方式是在 yml 配置文件中,除此之外,SpringBoot 还提供了其他配置属性的方式,下面以 windows 服务器为例来介绍。

2.1 通过 cmd 命令行配置

在运行 java -jar 命令时添加参数,以指定端口。该参数会被传递到启动类 main 方法的形参上(args 数组),项目启动后,该参数又被传递给 run 方法。

在这里插入图片描述

2.2 通过环境变量配置

在环境变量中添加属性,键和值需要与 SpringBoot 中需要的键和值保持一致,将来 Boot 程序会自动读取这些环境变量来使用。

在这里插入图片描述

重新打开 cmd,运行 jar 包,可以发现在环境变量中的修改已经生效

在这里插入图片描述

当需要配置的属性很多时,以上两种方式都比较繁琐。因此,SpringBoot 又提供了外部配置文件的方式来配置属性。

2.3 通过外部配置文件来配置

在 jar 包所在目录下,提供 application.yml 配置文件。可以在该文件中批量配置要修改的属性。jar 包运行起来之后,Springboot 会自动读取该文件中的配置来使用。

在这里插入图片描述

在测试该方法是否生效之前,删掉之前在环境变量中配置的端口号:

在这里插入图片描述

重新启动 cmd,端口号发生改变:

在这里插入图片描述

到此为止,我们已经学习了四种属性配置方式,它们的优先级如下(命令行参数优先级最高):

在这里插入图片描述

3. 多环境开发 Profiles

多环境指的是我们的程序将来可能运行在不同的环境中,如:开发、测试、生产环境。

在这里插入图片描述

在不同环境下,程序的配置信息有可能不同。举个例子:在开发、测试、生产环境中,程序连接的数据库是不同的,因此配置文件中书写的有关数据库的配置信息也会不同。为了使程序在不同环境下都能正确运行,需要不断修改项目的配置文件,这样的话非常繁琐,应该怎么解决呢?这就需要用到 SpringBoot 提供的多环境开发技术——Profiles。

解决刚刚的问题,最直观的方式就是为每个环境提供独立的数据配置信息,然后指定程序使用运行环境对应的配置信息:

在这里插入图片描述

下面就来介绍使用 Profiles 如何达到这种效果。

3.1 多环境开发的单文件配置

SpringBoot 提供的 Profiles 可以用来隔离应用程序配置的各个部分,并在特定环境下指定部分配置生效。

  • 如何分隔不同环境的配置?

在这里插入图片描述

  • 如何指定哪些配置属于哪个环境?

在这里插入图片描述

  • 如何指定哪个环境的配置生效?

在这里插入图片描述

在 yml 配置文件中,分别为开发、测试、生产环境进行信息配置的示例:

#通用信息
spring:profiles:active: test #指定生效的环境
server:servlet:context-path: /aaa #三个环境中共性的信息: 虚拟目录都是/aaa
---#开发环境
spring:config:activate:on-profile: dev #环境名称server:port: 8081 #端口号
---#测试环境
spring:config:activate:on-profile: test #环境名称server:port: 8082 #端口号---#生产环境
spring:config:activate:on-profile: pro #环境名称server:port: 8083 #端口号

启动程序,程序运行在测试环境,端口号是 8082,虚拟目录是 /aaa:

在这里插入图片描述

如果特定环境中的配置和通用信息冲突了,特定环境中的配置生效。

在这里插入图片描述

启动程序,程序运行在开发环境,端口号是 8081,虚拟目录是 /bbb:

在这里插入图片描述

如果在 yml 配置文件中,每个环境的配置信息都非常多,就会很难维护,修改配置很容易出错,如何解决呢?

3.2 多环境开发的多文件配置

  • 通过多个文件分别为不同环境配置属性
  • 不同环境的配置文件名字为 application-环境名称.yml
  • application.yml 中激活指定环境

在这里插入图片描述

示例:

在这里插入图片描述

3.3 多环境开发-分组

在前面,我们已经把不同环境的配置信息书写到了不同配置文件下,这样就能一定程度上减少单个配置文件的信息。但是这种拆分方式有时还是不能满足开发中的需求,把某个环境的配置信息都写到一个文件中,配置信息还是太多,依然不利于维护。

比如将来可能会在开发环境相关的配置文件中配置很多信息:服务器相关配置、数据源相关配置、自定义配置……

在这里插入图片描述

这样,一个配置文件可能会有几百行代码,维护起来还是很困难。为了解决这个问题,profiles 提供了分组功能:

在这里插入图片描述

  • 按照配置的类别,把配置信息配置到不同的配置文件中
    application-分类名.yml
  • 在application.yml中定义分组
    spring.profiles.group
  • 在application.yml中激活分组
    spring.profiles.active(不再是指定某个文件了,而是组的名称)

示例:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机视频压缩怎么压缩?一键瘦身~

现在手机已经成为我们日常生活中必不可少的工具&#xff0c;而在手机的应用领域中&#xff0c;文件的传输和存储是一个非常重要的问题。很多用户都会遇到这样一个问题&#xff0c;那就是在手机上存储的文件太多太大&#xff0c;导致手机存储空间不足&#xff0c;那么怎么在手机…

Typora 无法导出 pdf 问题的解决

目录 问题描述 解决困难 解决方法 问题描述 Windows 下&#xff0c;以前&#xff08;Windows 11&#xff09; Typora 可以顺利较快地由 .md 导出 .pdf 文件&#xff0c;此功能当然非常实用与重要。 然而&#xff0c;有一次电脑因故重装了系统&#xff08;刷机&#xff09;…

SpringMVC 环境搭建入门

SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架&#xff0c;属于SpringFrameWork 的后续产品&#xff0c;已经融合在 Spring Web Flow 中。 SpringMVC 已经成为目前最主流的MVC框架之一&#xff0c;并且随着Spring3.0 的发布&#xff0c;全面…

论述Python中列表、元组、字典和集合的概念

Python列表是用于存储任意数目、任意类型的数据集合&#xff0c;包含多个元素的有序连续的内存空间&#xff0c;是内置可变序列&#xff0c;或者说可以任意修改。在Python中&#xff0c;列表以方括号&#xff08;[ ]&#xff09;形式编写。 Python元组与Python列表类似&#x…

Flink 集成 Debezium Confluent Avro ( format=debezium-avro-confluent )

博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,京东购书链接:https://item.jd.com/12677623.html,扫描左侧二维…

docker生命周期管理命令

文章目录 前言1、docker create2、docker run2.1、常用选项2.2、系统2.3、网络2.4、健康检查 3、docker start/stop/restart4、docker kill5、docker rm6、docker pause/unpause总结 前言 在云原生时代&#xff0c;Docker已成为必不可少的容器管理工具。通过掌握Docker常用的容…

[UE]无法接收OnInputTouchBegin事件

遇到问题 想做一个鼠标按住左键选中Actor拖动而旋转的功能&#xff0c;想法是通过OnInputTouchBeginOnInputTouchEndTick实现。但是却无法接收OnInputTouchBegin与OnInputTouchEnd事件。 解决方案 想要触发OnInputTouchBegin事件 1.需要设置勾选ProjectSettings->Input-&…

.net访问oracle数据库性能问题

问题&#xff1a; 生产环境相同的inser语句在别的非.NET程序相应明显快于.NET程序&#xff0c;执行时间相差比较大&#xff0c;影响正常业务运行&#xff0c;测试环境反而正常。 问题详细诊断过程 问题初步判断诊断过程&#xff1a; 查询插入慢的sql_id 检查对应的执行计划…

Python zip函数

在Python编程中&#xff0c;zip()函数是一个功能强大而灵活的工具&#xff0c;用于将多个可迭代对象&#xff08;如列表、元组、字符串等&#xff09;组合成一个元组的序列。本文将深入探讨zip()函数的用法、语法、示例代码&#xff0c;并探讨其在实际编程中的应用场景。 什么…

HNU-数据挖掘-实验2-数据降维与可视化

数据挖掘课程实验实验2 数据降维与可视化 计科210X 甘晴void 202108010XXX 文章目录 数据挖掘课程实验<br>实验2 数据降维与可视化实验背景实验目标实验数据集说明实验参考步骤实验过程1.对数据进行初步降维2.使用无监督数据降维方法&#xff0c;比如PCA&#xff0c;I…

EasyExcel实现导出图片到excel

pom依赖&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.0</version> </dependency> 实体类&#xff1a; package com.aicut.monitor.vo;import com.aicut.monit…

Django开发_20_form表单前后端关联(2)

根据上一篇文章的代码,进一步了解掌握GET,POST的运行机制 一、实例代码 views.py: def show_reverse(request):if request.method "GET":return redirect(reverse("work4:fill"))if request.method "POST":hobby request.POST.get("h…

kafka summary

最近整体梳理之前用到的一些东西&#xff0c;回顾Kafka的时候好多东西都忘记了&#xff0c;把一些自己记的比较模糊并且感觉有用的东西整理一遍并且记忆一遍&#xff0c;仅用于记录以备后续回顾 Kafka的哪些场景中使用了零拷贝 生产者发送消息&#xff1a;在 Kafka 生产者发送…

暴力破解

暴力破解工具使用汇总 1.查看密码加密方式 在线网站&#xff1a;https://cmd5.com/ http://www.158566.com/ https://encode.chahuo.com/kali&#xff1a;hash-identifier2.hydra 用于各种服务的账号密码爆破&#xff1a;FTP/Mysql/SSH/RDP...常用参数 -l name 指定破解登录…

windows定时任务的查看、取消、启动和创建

一、查看 Windows 自动执行的指令 1.使用任务计划程序&#xff1a;任务计划程序是 Windows 内置的工具&#xff0c;可以用于创建、编辑和管理计划任务。您可以按照以下步骤查看已设置的计划任务&#xff1a; 1.1 按下 Win R 键&#xff0c;然后输入 “taskschd.msc”&#xff…

Bitbucket第一次代码仓库创建/提交/创建新分支/合并分支/忽略ignore

1. 首先要在bitbucket上创建一个项目&#xff0c;这个我没有权限创建&#xff0c;是找的管理员创建的。 管理员创建之后&#xff0c;这个项目给了我权限&#xff0c;我就可以创建我的代码仓库了。 2. 点击这个Projects下的具体项目名字&#xff0c;就会进入这样一个页面&#…

docker 存储管理

文章目录 docker 存储管理容器存储方案docker 容器存储解决方案 docker 存储驱动基本概述存储驱动的选择原则主流的 docker 存储驱动docker 版本支持的存储驱动 overlay2 存储驱动OverlayFSoverlay2 存储驱动要求配置 docker 使用 overlay2 驱动 overlay2 存储驱动的工作机制Ov…

Azure Private endpoint DNS 记录是如何解析的

Private endpoint 从本质上来说是Azure 服务在Azure 虚拟网络中安插的一张带私有地址的网卡。 举例来说如果Storage account在没有绑定private endpoint之前&#xff0c;查询Storage account的DNS记录会是如下情况&#xff1a; Seq Name …

Hive实战 —— 电商数据分析(全流程详解 真实数据)

目录 前言需求概述数据清洗数据分析一、前期准备二、项目1. 数据准备和了解2.确定数据粒度和有效列3.HDFS创建用于上传数据的目录4.建库数仓分层 5.建表5.1近源层建表5.2. 明细层建表为什么要构建时间维度表&#xff1f;如何构建时间维度表&#xff1f; 5.3 轻聚层建表6. 指标数…

eduSRC那些事儿-2(sql注入类+文件上传类)

点击星标&#xff0c;即时接收最新推文 本文对edusrc挖掘的部分漏洞进行整理&#xff0c;将案例脱敏后输出成文章&#xff0c;不包含0DAY/BYPASS的案例过程&#xff0c;仅对挖掘思路和方法进行相关讲解。 sql注入类 sql注入配合万能密钥进后台 在内网中扫描到网络运维资料管理系…