SpringBoot中配置多环境的配置文件

目录

  • 1. 前言
  • 2. 配置文件的优先级
  • 3. 引用外部的配置文件
  • 4. 配置多环境的配置文件
    • 4.1. 在配置文件中配置多环境
    • 4.2. 在代码中配置多环境
    • 4.3. 在项目启动时配置多环境

1. 前言

在我们的 SpringBoot 项目中,通常会有一个 application.ymlapplication.properties 的文件,这是整个 SpringBoot 项目的核心配置文件,通常文件中包含着端口、程序名、数据源等重要信息的配置

2. 配置文件的优先级

SpringBoot 项目中的 application.ymlapplication.properties 配置文件一共可以出现在如下 4 个位置

  1. 项目根目录下的 config 文件夹中
  2. 项目根目录下
  3. classpath 下的 config 文件夹中
  4. classpath

这四个位置的加载优先级依次为 1 > 2 > 3 > 4,如果这 4 个位置中都有 application.ymlapplication.properties 文件,那么加载的优先级从 14 依次降低。SpringBoot 将按照这个优先级查找配置信息,并加载到 Spring 环境中

SpringBoot中配置多环境的配置文件_第1张图片

3. 引用外部的配置文件

默认情况下 SpringBoot 查找 application.ymlapplication.properties 并加载。如果开发者不想使用其作为配置文件名,也可以自己定义。在打包启动时指定文件的路径或名称

  • 项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定文件名
java -jar xxx.jar --spring.config.name=filename
  • 项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定外部配置文件的位置
java -jar xxx.jar --spring.config.location=classpath:/app.properties 
  • 当然我们也可以指定外部配置所在的文件夹,启动时会搜索并使用该文件夹下的配置文件
java -jar xxx.jar --spring.config.location=classpath:/config/
  • 我们还可以同时配置多个路径,比如下面样例先加载外部配置文件,如果不存在外部配置文件的话则使用包内默认的配置文件
java -jar xxx.jar --spring.config.location=classpath:/,classpath:/config/

4. 配置多环境的配置文件

开发者在项目发布之前,一般需要频繁地在开发环境、测试环境以及生产环境之间进行切换,这个时候大量的配置需要频繁更改(如:数据库、redis、mongodb,MQ 等配置)。频繁修改带来了巨大的工作量,SpringBoot 中约定的不同环境下配置文件名称规则为

# profile:占位符表示当前环境的名称
application-{profile}.properties

4.1. 在配置文件中配置多环境

application.properties 中进行如下配置,则表示加载 application-dev.properties 文件

spring.profiles.active=dev

application.properties 中进行如下配置,则表示加载 application-prod.properties 文件

spring.profiles.active=prod

4.2. 在代码中配置多环境

在启动类的 main 方法上添加如下代码

@SpringBootApplication
public class Springdemo3Application {
 
    public static void main(String[] args) {
        SpringApplicationBuilder builder = new SpringApplicationBuilder(Springdemo3Application.class);
        builder.application().setAdditionalProfiles("dev");
        builder.run(args);
    }
}

4.3. 在项目启动时配置多环境

我们也可以在项目打包成 jar 包后启动时,在命令行中动态指定当前环境

java -jar xxx.jar --spring.profiles.active=dev

你可能感兴趣的:(springboot,SpringBoot)