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

news2024/11/17 9:31:31

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.coloradmin.cn/o/1414000.html

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

相关文章

【AndroidStudio】2022.3Giraffe连接超时,更换下载源,使用本地gradle,版本对应问题

记录了使用AndroidStudio2022.3 Giraffe版本在搭建环境时遇到的问题&#xff0c;包括连接超时&#xff0c;gradle无法读取等。 如果只看如何正确的配置&#xff0c;直接跳转第3节 配置汇总 1 连接超时 项目一开始会自动下载gardle文件来加载项目 1.1 Connect timed out 基…

【NodeJS JS】动态加载字体的各方式及注意事项;

首先加载字体这个需求基本只存在于非系统字体&#xff0c;系统已有字体不需要加载即可直接使用&#xff1b; 方案1&#xff1a;创建 style 标签&#xff0c;写入 font-face{font-family: xxx;src: url(xxx)} 等相关字体样式&#xff1b;将style标签添加到body里&#xff1b;方…

网站将http升级到https大概要多少费用

随着网络安全意识的不断提升&#xff0c;越来越多的网站正从传统的HTTP协议转向更安全的HTTPS协议。这一转变的核心在于部署SSL&#xff08;Secure Sockets Layer&#xff09;或TLS&#xff08;Transport Layer Security&#xff09;证书&#xff0c;以实现数据加密传输&#x…

数据结构(顺序表)

文章目录 一、线性表1、线性表1.1、线性表的定义1.2、线性表的操作 2、顺序表2.1、顺序表的实现--静态分配2.2、顺序表的实现--动态分配2.2、顺序表的特点 3、顺序表的基本操作3.1、插入操作3.2、删除操作3.3、查找操作3.2、按位查找3.2、按值查找 一、线性表 1、线性表 1.1、…

自动驾驶的决策层逻辑

作者 / 阿宝 编辑 / 阿宝 出品 / 阿宝1990 自动驾驶意味着决策责任方的转移 我国2020至2025年将会是向高级自动驾驶跨越的关键5年。自动驾驶等级提高意味着对驾驶员参与度的需求降低&#xff0c;以L3级别为界&#xff0c;低级别自动驾驶环境监测主体和决策责任方仍保留于驾驶…

大数据数据流分析和处理的工具pig,从入门到精通!

介绍&#xff1a;Pig是一种数据流语言和运行环境&#xff0c;用于处理和分析大数据。 Pig由两个主要部分构成&#xff1a; Pig Latin语言&#xff1a;这是一种用于描述数据流的高级语言&#xff0c;它允许用户以较为简洁的方式编写数据处理和转换任务。 Pig执行环境&#xff1a…

JVM工作原理与实战(二十八):内存溢出和内存泄漏

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、内存溢出与内存泄漏 1.内存溢出与内存泄漏介绍 2.内存泄漏的常见场景 3.解决内存溢出的步骤 总结 前言 JVM作为Java程序的运行环境&#xff0c;其负责解释和执行字节码&#x…

<蓝桥杯软件赛>零基础备赛20周--第18周--动态规划初步

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周。 在QQ群上交流答疑&am…

Mediasoup Demo-v3笔记(七)——Mediasoup 下的业务操作

Mediasoup 主业务的创建流程 Mediasoup 权限验证的创建 在实际的代码中&#xff0c;在main.cpp 中调用mediasoup_worker_run函数 在mediasoup_worker_run函数实现中进行了各个模块的初始化 Mediasoup 数据流转 创建连接的过程 数据传输过程 WebRTC大规模部署方案 方案一…

2.5W+ Star的人工智能(AI)项目,微软官方出品,助你快速入门!

目录 [>> 微软推出的人工智能&#xff08;AI&#xff09;入门课程&#xff1a;microsoft/AI-For-Beginners](https://gitcode.com/microsoft/AI-For-Beginners)[>> AI学习项目汇总&#xff1a;tangyudi/Ai-Learn](https://gitcode.com/tangyudi/Ai-Learn)[>>…

pdf.js 实现pdf在线搜索,分页,下载,放大,打印功能

下载插件地址&#xff1a; https://download.csdn.net/download/xiaogg3678/88780912 浏览器在线预览地址&#xff1a; http://localhost/pdfjs-viewer/web/viewer.html?filehttp://localhost/pdfjs-viewer/web/compressed.tracemonkey-pldi-09.pdf

JVM篇:垃圾回收

如何判断对象可以被回收 Java中对象能否被回收&#xff0c;是根据兑现是否被引用来决定的。如果对象被引用了&#xff0c;说明该对象还在使用&#xff0c;不允许被回收 main栈帧中demo变量存储着Demo实例对象的地址&#xff0c;与Demo实例对象建立了连接关系此时Demo实例对象可…

windows系统中如何安装tomcat

在 Windows 系统中安装 Tomcat 通常涉及以下步骤: 1.下载 Tomcat: 访问 Apache Tomcat 官方网站。在 "Download" 部分找到适用于 Windows 的最新版本的 Tomcat。下载 Core 二进制分发版(通常是.zip文件)。 2.解压 Tomcat 压缩包: 将下载的.zip文件解压到…

如何在前端项目里接入Sentry监控系统并通过企业微信通知

能不能让用户录个屏过来呀&#xff1f; 用户使用的是什么机型的手机&#xff1f; 用户使用的什么浏览器呀&#xff1f; 用户的网络是什么情况&#xff1f; … … 线上出现问题时&#xff0c;技术部和业务部同学之间的对话诸如此类…业务同学也很栓Q呀&#xff0c;硬着头皮去问客…

Java Swing桌面项目打包成可执行jar

前言 最近有需求&#xff0c;将Swing项目打包为一个可执行的jar包&#xff0c;遇见了一些问题&#xff0c;参考AI助手&#xff0c;解决了遇到的问题&#xff0c;也有一些亲身实践体会&#xff0c;记录一下。开发环境IntelliJ IDEA&#xff0c;JDK8&#xff0c;用kotlin语言实现…

257:vue+openlayers 实现动态点点网格

第257个 点击查看专栏目录 本示例介绍演示如何在vue+openlayers中实现动态网格,这里通过第三方插件ol-grid来实现。具体的请参考示例源代码和API 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示例效果图配置方式示例源代码(80行)相关API参考…

Discuz论坛搭建:Linux宝塔面板一键部署,固定地址畅享公网访问

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、Cpolar杂谈 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 安装基础环境二. 一键部署Discuz三. 安装cpolar工具四. 配置域名访问Discuz…

DS:单链表的实现(超详细!!)

创作不易&#xff0c;友友们点个三连吧&#xff01; 在博主的上一篇文章中&#xff0c;很详细地介绍了顺序表实现的过程以及如何去书写代码&#xff0c;如果没看过的友友们建议先去看看哦&#xff01; DS&#xff1a;顺序表的实现&#xff08;超详细&#xff01;&#xff01;&…

最新整理盘点全球最先进的几十种人工智能大模型,OpenChat:性能高达105.7%,第一个超越ChatGPT的开源模型?附开源代码地址

最新整理盘点全球最先进的几十种人工智能大模型,OpenChat:性能高达105.7%,第一个超越ChatGPT的开源模型?附开源代码地址 前几天开源模型第一还是是Vicuna-33B、WizardLM,这不又换人了。对于开源模型的风起云涌,大家见怪不怪,不断更新的LLM榜单似乎也没那么吸引人了。 U…

ajax点击搜索返回所需数据

html 中body设置&#xff08;css设置跟进自身需求&#xff09; <p idsearch_head>学生信息查询表</p> <div id"div_1"> <div class"search_div"> <div class"search_div_item"> …