Spring Boot Environment 环境配置详解一、概述Spring Boot 的Environment是应用配置的核心抽象,它封装了所有配置属性来源,包括配置文件、环境变量、命令行参数等。二、Environment 接口层次Environment └── ConfigurableEnvironment └── ConfigurableWebEnvironment └── StandardServletEnvironment (Servlet Web) └── StandardReactiveWebEnvironment (Reactive Web) └── StandardEnvironment (非 Web)三、配置属性源 (PropertySource)3.1 默认属性源顺序Spring Boot 按照以下优先级加载配置(从高到低):命令行参数(--server.port=8080)JNDI 属性(java:comp/env)Java 系统属性(System.getProperties())操作系统环境变量RandomValuePropertySource(random.*)Profile 特定配置文件(jar 包外部)application-{profile}.propertiesapplication-{profile}.ymlProfile 特定配置文件(jar 包内部)应用配置文件(jar 包外部)application.propertiesapplication.yml应用配置文件(jar 包内部)@PropertySource注解SpringApplication 默认属性3.2 配置示例# 高优先级配置会覆盖低优先级server:port:8080# 默认配置# 命令行参数 --server.port=9090 会覆盖此值四、配置文件详解4.1 配置文件位置Spring Boot 默认从以下位置加载配置(按优先级排序):./config/(当前目录下的 config 目录)./(当前目录)classpath:/config/(类路径下的 config 目录)classpath:/(类路径根目录)4.2 配置文件格式# application.yml (推荐)server:port:8080servlet:context-path:/apispring:application:name:myappprofiles:active:dev# application.propertiesserver.port=8080 server.servlet.context-path=/api spring.application.name=myapp spring.profiles.active=dev4.3 YAML 多文档块# 默认配置server:port:8080---# dev 环境配置spring:config:activate:on-profile:devserver:port:8081---# prod 环境配置spring:config:activate:on-profile:prodserver:port:8082五、Profile 机制5.1 Profile 激活方式# 1. 配置文件方式spring.profiles.active=dev# 2. 命令行参数java-jarmyapp.jar--spring.profiles.active=dev# 3. 环境变量exportSPRING_PROFILES_ACTIVE=dev# 4. Java 系统属性java-Dspring.profiles.active=dev-jarmyapp.jar# 5. 编程方式SpringApplication app=new SpringApplication(MyApp.class);app.setAdditionalProfiles("dev");app.run(args);5.2 Profile 特定 Bean@ConfigurationpublicclassDataSourceConfig{@Bean@Profile("dev")publicDataSourcedevDataSource(){returnnewEmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2).build()