SpringBoot读取application.yml作为配置的处理
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配置管理
相关文章
Java 同步关键字 synchronized用法 、场景及避坑指南
synchronized 是 Java 最基础、最常用的线程同步方式,优点是 简单易用、无需手动释放锁、JVM 自动优化,适合解决大多数线程安全问题,本文给大家介绍Java 同步关键字 synchronized用法 + 场景 + 避坑指南,感兴趣的朋友跟随小编一起看看吧2025-12-12
java多线程编程之使用Synchronized关键字同步类方法
JAVA中要想解决“脏数据”的问题,最简单的方法就是使用synchronized关键字来使run方法同步,看下面的代码,只要在void和public之间加上synchronized关键字2014-01-01
Spring Boot环境下Mybatis Plus的快速应用操作
这篇文章主要介绍了Spring Boot环境下Mybatis Plus的快速应用操作,具有很好的价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-11-11
java读取文件内容的三种方法代码片断分享(java文件操作)
本文介绍java读取文件内容的三种方法,代码可以直接放到程序中使用,大家参考使用吧2014-01-01


最新评论