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(不再是指定某个文件了,而是组的名称)

示例:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Doris简介及单机部署(超详细)

文章目录 一、Doris简介1、Doris介绍2、Doris架构 二、Doris单机部署&#xff08;Centos7.9&#xff09;1、下载Doris2、准备环境3、安装部署3.1 创建存储目录3.2 配置 FE3.3 启动 FE3.4 查看 FE 运行状态3.5 配置 BE3.6 启动 BE3.7 添加 BE 节点到集群3.8 查看 BE 运行状态3.9…

为什么现在年轻人宁愿自己工资低点也要过得舒服,不那么累?

​为什么现在的年轻人宁愿工资低点也要过得舒服&#xff1f; 在当今社会&#xff0c;我们不难发现一种现象&#xff1a;越来越多的年轻人宁愿选择工资稍低&#xff0c;但相对轻松的工作&#xff0c;而不是追求高收入和高压力的职位。这似乎与传统的观念相悖&#xff0c;因为在…

maven中的version加不加SNAPSHOT的区别

我们平时开发时经常看到maven的pom.xml文件里面的包有两种 因为maven的远程仓库一般分为public(Release)和SNAPSHOT&#xff0c;前者代表正式版本&#xff0c;后者代表快照版本。 具体有什么区别呢&#xff1a; 举例说明&#xff0c;你开发了一个基础功能&#xff0c;打包发布…

记录我的历程

1、2024年1月30号更新 从2024年1月22号开始复更&#xff0c;已添加20篇文章&#xff0c; 前一阶段&#xff1a;排名1502450、原力分2、粉丝3人

electron-builder vue 打包后element-ui字体图标不显示问题

当使用electron打包完成的时候&#xff0c;启动项目发现使用的element-ui字体图标没显示都变成了小方块&#xff0c;并出现报错&#xff0c;请看下图&#xff1a; 解决方法&#xff1a; 在vue.config.js中设置 customFileProtocol字段&#xff1a;pluginOptions: {electronBui…

港大、TikTok推出任意图像的深度估计大模型Depth Anything,致敬Segment Anything

目录 前言 1.摘要 2.方法 3.实验结果 4.总结 前言 人类有两只眼睛来估计视觉环境的深度信息&#xff0c;但机器人和 VR 头社等设备却往往没有这样的「配置」&#xff0c;往往只能靠单个摄像头或单张图像来估计深度。这个任务也被称为单目深度估计&#x…

CXYGZL-程序员工作流:自定义流程打印模板,新增审批人类型

概述 我们的工作流引擎采用了低代码方式&#xff0c;借鉴了钉钉和飞书的设计思路&#xff0c;旨在降低用户的使用门槛。相比基于BPMN.js的工作流引擎&#xff0c;我们的解决方案更容易上手&#xff0c;一般用户也能在几分钟内搭建自己的工作流程。这样&#xff0c;非专业人员也…

vue中的vuex

在Windows的应用程序开发中&#xff0c;我们习惯了变量&#xff08;对象&#xff09;声明和使用方式&#xff0c;就是有全局和局部之分&#xff0c;定义好了全局变量&#xff08;对象&#xff09;以后在其他窗体中就可以使用&#xff0c;但是窗体之间的变量&#xff08;对象&am…

神经调节的Hebbian学习用于完全测试时自适应

摘要 完全测试时自适应&#xff08;Fully test-time adaptation&#xff09;是指在推理阶段对输入样本进行序列分析&#xff0c;从而对网络模型进行自适应&#xff0c;以解决深度神经网络的跨域性能退化问题。我们从生物学合理性学习中获得灵感&#xff0c;其中神经元反应是基…

开发通用模板设计

文章目录 需求摘要1 模板描述2 模板内容介绍2.1 模块间依赖关系2.2 模板目前集成2.2.1 swaggerKnife4j2.2.1 nacosSpringBootSpringCloudAlibaba 3 项目地址4 FAQ 需求 目前在开发中&#xff0c;使用的非本人搭建的项目架子&#xff0c;存在如下问题&#xff1a; 依赖无法统一…

快速理解MoE模型

最近由于一些开源MoE模型的出现&#xff0c;带火了开源社区&#xff0c;为何&#xff1f;因为它开源了最有名气的GPT4的模型结构&#xff08;OPEN AI&#xff09;&#xff0c;GPT4为何那么强大呢&#xff1f;看看MoE模型的你就知道了。 MoE模型结构&#xff1a; 图中&#xff0…

贪吃蛇游戏的实现

一.技术要点: 贪吃蛇需要掌握: c语言函数,枚举,结构体,动态内存管理,预处理指令,链表,Win32 API等 二.Win32 API 1.Win32 API简介 windows可以帮应用程序卡其视窗,描绘图案,使用周边设备,,Win32 API就是windows32位平台上的应用程序编程接口 2.控制台程序 (1).使用cmd命令…

如何在群晖中本地部署WPS Office并实现公网远程访问

文章目录 1. 拉取WPS Office镜像2. 运行WPS Office镜像容器3. 本地访问WPS Office4. 群晖安装Cpolar5. 配置WPS Office远程地址6. 远程访问WPS Office小结 7. 固定公网地址 wps-office是一个在Linux服务器上部署WPS Office的镜像。它基于WPS Office的Linux版本&#xff0c;通过…

最优化基础 - (最优化问题分类、凸集)

系统学习最优化理论 什么是最优化问题&#xff1f; 决策问题&#xff1a; &#xff08;1&#xff09;决策变量 &#xff08;2&#xff09;目标函数&#xff08;一个或多个&#xff09; &#xff08;3&#xff09;一个可由可行策略组成的集合&#xff08;等式约束或者不等式约束…

【RT-DETR改进涨点】ResNet18、34、50、101等多个版本移植到ultralytics仓库(RT-DETR官方一比一移植)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文是本专栏的第一篇改进,我将RT-DETR官方版本中的ResNet18、ResNet34、ResNet50、ResNet101移植到ultralytics仓库,网上很多改进机制是将基础版本的也就是2015年发布的ResNet移植到ultralytics仓库中,但是其实…

2024.1.29 GNSS 学习笔记

1.假设只对4颗卫星进行观测定位&#xff0c;卫星的截止高度角是15&#xff0c;那么如何布设这四颗卫星的位置&#xff0c;使其围成的四面体的体积得到最大&#xff0c;以获得最好定位精度&#xff1f; 答&#xff1a;3颗卫星均匀分布在最低仰角面上&#xff0c;第4颗卫星在测站…

live2D学习:表情的制作和给角色添加动作

表情的制作和给角色添加动作https://www.bilibili.com/video/BV1JE411Y7Te?p3&vd_source124076d7d88eee393a1d8bf6fc787efa 先把眼睛以外的部件进行锁定&#xff0c;可以长按鼠标左键&#xff0c;然进行框选左边的锁的部分&#xff0c;快速进行操作。 锁定的部件就没有办…

力扣712. 两个字符串的最小ASCII删除和

动态规划 思路&#xff1a; 假设 dp[i][j] 是 s1 长度 i 和 s2 长度 j 两个字符串的最小 ASCII 删除和&#xff1b;dp[i][j] 可以由&#xff1a; 如果 s1 的第 i 个字符&#xff08;s1[i - 1]&#xff09;和 s2 的第 j 个字符&#xff08;s2[j - 1]&#xff09;不相等&#xf…

这么复杂的刻度标签怎么绘制?超简单~~

今天我们开始「粉丝要求绘图系列」的第一篇推文 &#xff0c;这个系列我会筛选出需求较多的一类图进行绘制讲解&#xff0c;当然&#xff0c;绘图的数据我们尽可能的全部分享出来(即使涉及一些论文数据&#xff0c;我们也会根据情况进行虚构处理的)&#xff0c;本期的推文重要涉…

如何让wordpress首页只显示某一篇文章全部内容?在您的主页显示选择

大多数WordPress站点首页默认都是显示最新发布的文章列表&#xff0c;不过有些站点比较特殊&#xff0c;只想显示某一篇文章的全部内容&#xff0c;那么应该怎么设置呢&#xff1f; 其实&#xff0c;WordPress后台 >> 设置 >> 阅读 >> 在“您的主页显示”中…