外观
07b. Spring Boot 配置详解
目标:理解
application.yml配置文件的结构,掌握@Value、Profile 多环境配置。
在前端项目中,你一定用过 .env、.env.development、.env.production。Spring Boot 的配置文件是 application.yml(或 application.properties),作用完全一样——把可变参数从代码中提取出来。
1. 配置文件格式
Spring Boot 支持两种格式:
1.1 properties 格式(key=value)
properties
# application.properties
server.port=8080
spring.application.name=demo
spring.data.mongodb.uri=mongodb://localhost:27017/mydb1.2 YAML 格式(推荐 ✅)
yaml
# application.yml
server:
port: 8080
spring:
application:
name: demo
data:
mongodb:
uri: mongodb://localhost:27017/mydbYAML 格式更直观、有层级,真实项目中基本都用 .yml。
前端类比:
env# .env VITE_API_URL=http://localhost:3000 VITE_APP_TITLE=My AppSpring 的 yml 就是更结构化的
.env。
2. 常见配置项
2.1 服务器配置
yaml
server:
port: 8080 # 服务端口(默认 8080)
servlet:
context-path: /api # 统一路径前缀,所有接口变成 /api/xxx2.2 数据库配置
yaml
spring:
data:
mongodb:
uri: mongodb://localhost:27017/mydb
datasource: # MySQL
url: jdbc:mysql://localhost:3306/mydb
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver2.3 Redis 配置
yaml
spring:
data:
redis:
host: localhost
port: 6379
password: ""2.4 自定义配置
yaml
# 你可以自定义任何 key
app:
upload-dir: /data/uploads
max-file-size: 10MB
jwt:
secret: my-secret-key
expiration: 864003. 在代码中读取配置
3.1 @Value(读取单个值)
java
@Service
public class FileService {
@Value("${app.upload-dir}")
private String uploadDir;
@Value("${app.max-file-size}")
private String maxFileSize;
@Value("${server.port}")
private int serverPort;
public void info() {
System.out.println("上传目录: " + uploadDir);
System.out.println("端口: " + serverPort);
}
}前端类比:
import.meta.env.VITE_API_URL或process.env.API_URL。@Value("${...}")= Java 版的环境变量读取。
3.2 @ConfigurationProperties(推荐,映射整块配置)
当配置项比较多时,一个个 @Value 太啰嗦。@ConfigurationProperties 可以把一整块配置映射到一个对象:
java
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "app.jwt")
public class JwtProperties {
private String secret;
private long expiration;
}对应的配置:
yaml
app:
jwt:
secret: my-secret-key
expiration: 86400使用时直接注入:
java
@Service
public class AuthService {
private final JwtProperties jwtProps;
public AuthService(JwtProperties jwtProps) {
this.jwtProps = jwtProps;
}
public void showConfig() {
System.out.println(jwtProps.getSecret()); // my-secret-key
System.out.println(jwtProps.getExpiration()); // 86400
}
}前端类比:像是把
.env里的一组变量解构到一个配置对象里——const jwt = { secret: env.JWT_SECRET, exp: env.JWT_EXP }。
4. Profile —— 多环境配置
4.1 为什么需要?
开发时连本地数据库,上线连生产数据库。你不能每次部署都手动改配置文件。
前端类比:
.env.development+.env.production,Vite 会根据--mode自动选择。
4.2 文件命名约定
text
src/main/resources/
├── application.yml ← 公共配置(所有环境共用)
├── application-dev.yml ← 开发环境配置
├── application-prod.yml ← 生产环境配置
└── application-test.yml ← 测试环境配置4.3 示例
application.yml(公共)
yaml
spring:
application:
name: demo
profiles:
active: dev # ← 默认激活 dev 环境application-dev.yml(开发环境)
yaml
server:
port: 8080
spring:
data:
mongodb:
uri: mongodb://localhost:27017/demo_dev
app:
debug: trueapplication-prod.yml(生产环境)
yaml
server:
port: 80
spring:
data:
mongodb:
uri: mongodb://db-server:27017/demo_prod
app:
debug: false4.4 切换环境
bash
# 方式一:命令行参数
java -jar demo.jar --spring.profiles.active=prod
# 方式二:环境变量
export SPRING_PROFILES_ACTIVE=prod
java -jar demo.jar
# 方式三:在 application.yml 中写死(开发时常用)
spring:
profiles:
active: dev前端对比:
前端 Spring Boot vite --mode development--spring.profiles.active=dev.env.developmentapplication-dev.yml.env.productionapplication-prod.ymlimport.meta.env.VITE_XXX@Value("${xxx}")
5. 配置优先级
Spring Boot 的配置可以来自很多地方,优先级从高到低:
text
1. 命令行参数 --server.port=9090
2. 环境变量 SERVER_PORT=9090
3. application-{profile}.yml
4. application.yml
5. 代码中的默认值 @Value("${xxx:默认值}")高优先级会覆盖低优先级。
@Value 可以设默认值:
java
@Value("${app.debug:false}") // 如果配置里没有 app.debug,就用 false
private boolean debug;6. 敏感配置处理
不要把密码、密钥等敏感信息直接写在 yml 里提交到 Git。
常见做法:
yaml
spring:
data:
mongodb:
uri: ${MONGO_URI} # ← 从环境变量读取部署时通过环境变量注入:
bash
export MONGO_URI=mongodb://user:pass@prod-server:27017/mydb
java -jar demo.jar前端类比:你不会把 API Key 写在代码里 push 到 GitHub,而是放在
.env.local(被.gitignore忽略)。Spring 项目也是一样的思路。
总结
- application.yml 是 Spring Boot 的核心配置文件,相当于前端的
.env。 - @Value 读取单个配置值,@ConfigurationProperties 映射整块配置到对象。
- Profile 实现多环境切换:
application-dev.yml/application-prod.yml,通过--spring.profiles.active切换。 - 优先级:命令行 > 环境变量 > profile 配置 > 默认配置。
- 敏感信息用环境变量注入,不要硬编码在配置文件里。
