SpringBoot多环境开发

多环境开发

使用---区分多环境

yml配置格式

方法1

#设置启用的环境
spring:
  profiles:
    active: dev
		
---
#开发
spring:
  config:
    activate:
      no-profiles: dev
jdbc:
  url: jdbc:mysql://21.36.2.252/ccb
  user: ccb_admin
  password: 3&dg7quwdu!
server:
  port: 8080
---
#生产
spring:
  config:
    activate:
      no-profiles: pro
jdbc:
  url: jdbc:mysql://211.316.211.252/ccb
  user: ccb_uesr
  password: 3&dg7grerge4
server:
  port: 8081
---
#测试
spring:
  config:
    activate:
      no-profiles: test
jdbc:
  url: jdbc:mysql://localhost/ccb
  user: root
  password: 1234
server:
  port: 8082

方法2

application.yml

spring:
  profiles:
    active: dev

application-dev.yml

server:
  port: 80
properties配置格式

主配置文件application.properties:

#设置启用的环境
spring.profiles.active=dev

环境分类配置文件application-dev.properties:

server.port=8080

环境分类配置文件application-pro.properties:

server.port=8081

环境分类配置文件application-test.properties:

server.port=8082
多环境分组管理

springboot2.4之前

  1. 根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下
  2. 使用include属性在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔
  3. 加载时按顺序,include--->active,后加载的覆盖先加载的(devMVC-->devDB-->dev)

application.yml

spring:
  profiles:
    active: dev
    include: devMVC,devDB

application-devMVC.yml

server:
  servlet:
    conntext-path: /ebank

springboot2.4之后

  1. 启动dev后会加载对应组的配置
  2. 顺序变了:dev-->devDB-->devMVC;后加载的覆盖先加载的

application.yml

spring:
  profiles:
    active: dev
    group:
      "dev": devDB,devMVC
      "pro": proDB,proMVC
多环境命令行启动参数配置

使用 SpringBoot 开发的程序以后都是打成 jar 包,通过 java -jar xxx.jar 的方式启动服务的。那么就存在一个问题,如何切换环境呢?因为配置文件打到的jar包中了。

我们知道 jar 包其实就是一个压缩包,可以解压缩,然后修改配置,最后再打成jar包就可以了。这种方式显然有点麻烦,而 SpringBoot 提供了在运行 jar 时设置开启指定的环境的方式,如下

java –jar xxx.jar –-spring.profiles.active=test

那么这种方式能不能临时修改端口号呢?也是可以的,可以通过如下方式

java –jar xxx.jar –-server.port=88

当然也可以同时设置多个配置,比如即指定启用哪个环境配置,又临时指定端口,如下

java –jar springboot.jar –-server.port=88 –-spring.profiles.active=test

大家进行测试后就会发现命令行设置的端口号优先级高(也就是使用的是命令行设置的端口号),配置的优先级其实 SpringBoot 官网已经进行了说明,参见 :

https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config

进入上面网站后会看到如下页面


  1. 当配置中有中文,idea改成utf-8
  2. 带参数启动SpringBoot优先级较高
    1. 参数优先级顺序:https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config

测试环境:

java -jar 文件名.jar  --spirng.profiles.active=test

临时改端口:

java -jar 文件名.jar  --spirng.profiles.active=test  --server.port=88
多环境开发兼容问题(maven/boot)

都配置多环境开发时的兼容问题

当Maven与SpringBoot同时对多环境进行控制时,以Mavn为主,SpringBoot使用@..@占位符读取引用Maven对应的配置属性值

基于SpringBoot读取Maven配置属性的前提下,如果在Idea下测试工程时pom.xml每次更新需要手动compile方可生效


资源文件处理的插件

解析{},加载yml里的配置

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.3.1</version>
    <configuration>
        <encoding>UTF-8</encoding>
        <useDefaultDelimiters>true</useDefaultDelimiters>
    </configuration>
</plugin>

pom.xml

<!--多环境-->
<profiles>
    <!--开发环境-->
    <profile>
        <id>dev</id>
        <properties>
            <profile.active>dev</profile.active>
        </properties>
    </profile>
    <!--生产环境-->
    <profile>
        <id>pro</id>
        <properties>
            <profile.active>pro</profile.active>
        </properties>
    </profile>
    <!--测试环境-->
    <profile>
        <id>test</id>
        <properties>
            <profile.active>test</profile.active>
        </properties>
        
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
</profiles>

修改yml

spring:
  profiles:
    active: ${profile.active}
    active: @profile.active@
配置文件分类

测试时要修改的临时属性太多java xxxxxxxx --xxx --xxx --xxx --xxx,使用配置文件启动

1级与2级留做系统打包后设置通用属性(上线);3级与4级用于系统开发阶段设置通用属性(开发)

SpringBoot中的4种配置文件

  1. file : config/application.yml(最高)(jar包同级目录)
  2. file : application.yml
  3. classpath: config/application.yml
  4. classpath: application.yml(最普通的配置文件)
posted @ 2024-04-02 16:55  燕子去了  阅读(14)  评论(0编辑  收藏  举报

Powered by .NET 8.0 on Kubernetes

我会翻山越岭,到每一个我想去的地方

...