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

本文详细介绍了SpringBoot项目的部署过程,包括打包、部署到服务器以及如何通过cmd命令行、环境变量和外部配置文件配置属性,特别关注了多环境开发中Profiles的使用,以解决不同环境下的配置管理和维护问题。
摘要由CSDN通过智能技术生成

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

示例:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值