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

文章目录

  • 1. SpringBoot 项目部署
  • 2. 属性配置方式
    • 2.1 通过 cmd 命令行配置
    • 2.2 通过环境变量配置
    • 2.3 通过外部配置文件来配置
  • 3. 多环境开发 Profiles
    • 3.1 多环境开发的单文件配置
    • 3.2 多环境开发的多文件配置
    • 3.3 多环境开发-分组

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.mzph.cn/news/654546.shtml

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

相关文章

LLM大模型x知识图谱2024最新SOTA方案【附开源代码】

大模型LLM与知识图谱KG的结合可以充分发挥两者的优势&#xff0c;例如LLMs的通用知识和语言处理能力&#xff0c;以及KGs的结构化和准确性。这种结合不仅能够提升模型的知识处理能力&#xff0c;还能够在多个层面上优化模型的性能&#xff0c;更好地解决各种现实世界的问题&…

新火种AI|Taylor Swift不雅照被疯传!AI背后的隐患和危机引人深思...

作者&#xff1a;小岩 编辑&#xff1a;彩云 如今本就是一个信息爆炸的年代&#xff0c;再伴随2023年AI技术的井喷式发展&#xff0c;AI正在以迅雷不及掩耳之势渗透到我们生活的方方面面。不过&#xff0c;AI技术是一把双刃剑&#xff0c;我们在享受AI技术带来的便捷和实用的…

代码随想录刷题笔记 DAY17 | 平衡二叉树 No.110 | 二叉树的所有路径 No.257 | 左叶子之和 No.404

Day 17 01. 平衡二叉树&#xff08;No. 110&#xff09; 题目链接 代码随想录题解 1.1 题目 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超…

LabVIEW直流电机转速检测与控制

研究了使用LabVIEW软件和ELVIS实验平台来检测和控制直流电机的转速。通过集成光电传感器和霍尔传感器&#xff0c;实现了对电机转速的精确测量和调节。 系统组成&#xff1a;系统由NI ELVIS实验平台、光电传感器、霍尔传感器和直流电机组成。通过这些硬件元件&#xff0c;系统…

架构篇19:单服务器高性能模式-Reactor与Proactor

文章目录 ReactorProactor小结上篇介绍了单服务器高性能的 PPC 和 TPC 模式,它们的优点是实现简单,缺点是都无法支撑高并发的场景,尤其是互联网发展到现在,各种海量用户业务的出现,PPC 和 TPC 完全无能为力。今天我将介绍可以应对高并发场景的单服务器高性能架构模式:Rea…

如何本地搭建Tale博客网站并发布到公网分享好友远程访问——“cpolar内网穿透”

文章目录 前言1. Tale网站搭建1.1 检查本地环境1.2 部署Tale个人博客系统1.3 启动Tale服务1.4 访问博客地址 2. Linux安装Cpolar内网穿透3. 创建Tale博客公网地址4. 使用公网地址访问Tale 前言 今天给大家带来一款基于 Java 语言的轻量级博客开源项目——Tale&#xff0c;Tale…

C/C++编码问题研究

文章目录 一、Unicode字符集与U8/U16/U32编码二、编码1. 占字节数2. ASCII、GB2312、GBK、GB18030 以及 UTF8 的关系3. BOM4. UTF-8的存储实现 三、编译器字符集设置1. GCC语法Example 2. MSVC语法Example 三、wchar_t五、编码转换函数六、代码 & 实践1. UTF8与UTF16、UTF3…

机器学习系列 16:使用 scikit-learn 的 Pipeline

在机器学习项目中&#xff0c;我们经常需要进行大量的数据预处理步骤&#xff0c;最后用处理干净的数据集来拟合机器学习算法得到一个合适的机器学习模型。 scikit-learn 提供了一个强大的 Pipeline 类来帮助我们将所有的数据预处理步骤和训练模型的步骤串起来。就像流水线一样…

数据目录驱动测试——深入探讨Pytest插件 pytest-datadir

在软件测试中,有效管理测试数据对于编写全面的测试用例至关重要。Pytest插件 pytest-datadir 提供了一种优雅的解决方案,使得数据目录驱动测试变得更加简单而灵活。本文将深入介绍 pytest-datadir 插件的基本用法和实际案例,助你更好地组织和利用测试数据。 什么是pytest-da…

重写Sylar基于协程的服务器(0、搭建开发环境以及项目框架 || 下载编译简化版Sylar)

重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 重写Sylar基于协程的服务器系列&#xff1a; 重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 前言 sylar是…

搜索<2>——记忆化搜索与剪枝

Part 1:记忆化搜索 记忆化搜索其实就是拿个数组记录下已经得到的值&#xff0c;这样再遇到的时候直接调用即可。 P1464: 虽然此题好像不用记忆化也行&#xff0c;但我们还是老老实实写个记忆化吧。没什么困难的地方&#xff0c;就是它叫你怎么干你就怎么干&#xff0c;记得开…

PDA移动终端怎样解决货物管理混乱问题

在现代物流仓储行业中&#xff0c;货物管理混乱、信息不准确是一个普遍存在的问题。为了解决这一难题&#xff0c;PDA移动终端应运而生&#xff0c;通过其强大的数据采集功能、丰富传输功能、丰富联网方式和高防护性能等&#xff0c;为物流仓储企业提供了一种全新的解决方案。 …

jenkins pipeline配置maven可选参数

1、在Manage Jenkins下的Global Tool Configuration下对应的maven项添加我们要用得到的不同版本的maven安装项 2、pipeline文件内容具体如下 我们maven是单一的&#xff0c;所以我们都是配置单选参数 pipeline {agent anyparameters {gitParameter(name: BRANCH_TAG, type: …

【笔试常见编程题03】统计回文、连续最大和、不要二、把字符串转换成整数

1. 统计回文 “回文串”是一个正读和反读都一样的字符串&#xff0c;比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串&#xff0c;生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串…

Mysql运维篇(三) MySQL备份与恢复

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人。如有侵权&#xff0c;请留言&#xff0c;我及时删除&#xff01; 一、物理备份与逻辑备份 1、物理备份&#xff1a;备份数据文件&#xff0c;转储数据库物理文件到某…

Web 开发 9:Django 框架基础

在本篇文章中&#xff0c;我们将深入探讨 Django 框架的基础知识。Django 是一个功能强大且流行的 Python Web 框架&#xff0c;它提供了一套完整的工具和功能&#xff0c;用于开发高效、可扩展的 Web 应用程序。 什么是 Django&#xff1f; Django 是一个基于 Python 的免费…

【qt】switchBtn

方法1 在qtdesigner中设置按钮图标的三个属性&#xff0c;normal off 、normal on和checkabletrue。 from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5 import uic from switchBtn import Ui_Dialogclass Test(QDialog, Ui_…

Python判断语句——if语句的基本格式

一、引言 在Python编程语言中&#xff0c;if语句是一种基本的控制流语句&#xff0c;用于根据特定条件执行不同的代码块。它的基本格式相对简单&#xff0c;使得Python代码清晰、易于阅读。下面&#xff0c;我们将深入探讨if语句的基本格式、用法和注意事项。 二、if语句的…

Date类型转成字符类型(String),字符类型(String)转成Date类型

效果图 注意&#xff1a;不建议使用YYYY-MM-dd HH:mm:ss格式&#xff0c;使用yyyy-MM-dd HH:mm:ss格式 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date;public class DateTimeDemo {public static void main(String[] args) thro…

群辉开启WebDav服务+cpolar内网穿透实现移动端ES文件浏览器远程访问本地NAS文件

文章目录 1. 安装启用WebDAV2. 安装cpolar3. 配置公网访问地址4. 公网测试连接5. 固定连接公网地址6. 使用固定地址测试连接 本文主要介绍如何在群辉中开启WebDav服务&#xff0c;并结合cpolar内网穿透工具生成的公网地址&#xff0c;通过移动客户端ES文件浏览器即可实现移动设…