Spring Boot 把配置外部化,好让同一个 jar 在每个环境中运行。你把设置放进 application.yml(或 .properties),读入代码,并通过 profile 按环境切换行为。
application.yml 与 @Value
yaml
Spring Boot 把配置外部化,好让同一个 jar 在每个环境中运行。你把设置放进 application.yml(或 .properties),读入代码,并通过 profile 按环境切换行为。
@Component
public class SearchService {
// 注入单个属性;:20 是缺失时的回退值。
@Value("${app.page-size:20}")
private int pageSize;
}
对于超过一两个值的情况,绑定一个类型化对象,而不是到处散落 @Value:
@Component
@ConfigurationProperties(prefix = "app") // 把 app.* 绑定到这些字段
public class AppProps {
private int pageSize;
private Map<String, Boolean> featureFlags;
// getters/setters —— Boot 会宽松绑定 page-size -> pageSize
}
这带来类型安全、IDE 自动补全和校验(加上 @Validated + 约束)。
spring:
config:
activate:
on-profile: prod # 仅当 'prod' 激活时
server:
port: 80
像 application-dev.yml 和 application-prod.yml 这样的文件会叠加在基础配置之上。用 --spring.profiles.active=prod 或 SPRING_PROFILES_ACTIVE 环境变量来激活其中之一。优先级顺序很重要:命令行参数和环境变量会覆盖文件,所以密钥不会留在 jar 里。
面试官在确认你能把同一个制品跨 dev/staging/prod 部署而无需重新构建。提到用 @ConfigurationProperties 而非散落的 @Value,以及环境变量覆盖文件以保护密钥,说明你在生产中跑过 Boot 应用,而不只是在本地。
一个包含详细解答的 IT 面试题库——从初级到高级。
捐赠