SpringBoot读取application.yml作为配置的处理
作者:han_hanker
SpringBoot支持将配置放在application.yml或application.properties中,自动加载并注入到应用中,使用@Value或@ConfigurationProperties读取配置,推荐使用后者处理结构化配置
Spring Boot 的一大优势是 “约定优于配置” + “配置外部化”。
你不需要写 XML 或硬编码参数,而是把配置放在 application.yml(或 application.properties) 中,Spring Boot 自动加载并注入到你的应用中。
支持格式:.properties(键值对) 和 .yml(YAML,层次清晰,推荐)
Spring Boot 会按以下顺序查找 application.yml(后出现的会覆盖前面的):
- 当前项目根目录下的 /config 子目录
- 当前项目根目录下
- classpath 下的 /config 包
- classpath 根路径(即 src/main/resources/)
最常用:src/main/resources/application.yml
基本用法:在代码中读取配置
1.使用 @Value(适合少量配置)
# application.yml app: name: MySpringBootApp version: 1.0.0
@Component
public class AppConfig {
@Value("${app.name}")
private String appName;
@Value("${app.version}")
private String version;
}2.使用 @ConfigurationProperties(推荐!适合结构化配置)
步骤 1:在 application.yml 中配置
# application.yml database: host: 192.168.1.100 port: 3307 username: admin password: secret123
步骤 2:定义配置类
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "database") // 对应 yml 中 database 开头的配置
public class DatabaseConfig {
private String host = "localhost";
private int port = 3306;
private String username;
private String password;
// 必须有 getter/setter(或用 Lombok @Data)
public String getHost() { return host; }
public void setHost(String host) { this.host = host; }
public int getPort() { return port; }
public void setPort(int port) { this.port = port; }
// ... 其他 setter/getter
}
步骤 3:在其他 Bean 中注入使用
@Service
public class UserService {
private final DatabaseConfig dbConfig;
public UserService(DatabaseConfig dbConfig) {
this.dbConfig = dbConfig;
}
public void connect() {
System.out.println("连接数据库: " + dbConfig.getHost() + ":" + dbConfig.getPort());
}
}
支持复杂结构:嵌套对象、List、Map
# application.yml
app:
security:
jwt:
secret: mySecretKey
expire-hours: 24
cors:
allowed-origins:
- http://localhost:3000
- https://myapp.com@Component
@ConfigurationProperties(prefix = "app")
public class AppProperties {
private Security security = new Security();
public static class Security {
private Jwt jwt = new Jwt();
private Cors cors = new Cors();
public static class Jwt {
private String secret;
private int expireHours;
// getters/setters
}
public static class Cors {
private List<String> allowedOrigins = new ArrayList<>();
// getter/setter
}
// getters/setters
}
// getter for security
}
启用 @ConfigurationProperties 的两种方式
1. 在配置类上加 @Component
@Component
@ConfigurationProperties(prefix = "xxx")
public class XxxProperties { ... }
2. 在 @Configuration 类上使用 @EnableConfigurationProperties
@Configuration
@EnableConfigurationProperties({DatabaseConfig.class, AppProperties.class})
public class AppConfig { }
不要同时用两种方式,否则可能创建多个实例
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- springboot一键application.yml配置文件实践
- SpringBoot application.yml配置文件使用及说明
- Springboot的application.properties或application.yml环境的指定运行与配置方式
- SpringBoot配置文件中常用配置属性详解(application.properties/application.yml)
- SpringBoot使用Nacos进行application.yml配置管理详解
- SpringBoot中application.yml基本配置解读
- SpringBoot使用Nacos进行application.yml配置管理
