Spring Boot 支持多种外部配置方式,允许你灵活地配置应用程序的行为。这种配置的灵活性使得 Spring Boot 非常适合在各种环境中运行,如开发、测试、生产等。以下是 Spring Boot 支持的主要外部配置方式:
1. application.properties
或 application.yml
文件
- 位置: 通常放在
src/main/resources
目录下。 - 格式: 支持两种格式:
.properties
和.yml
。 - 用途: 定义应用程序的各种配置参数,比如数据库连接、服务器端口等。
2. 命令行参数
- 形式: 在启动应用时,可以通过
java -jar
命令传递参数。例如:java -jar myapp.jar --server.port=8081
- 用途: 在运行时覆盖配置文件中的配置,适合临时调整配置。
3. 环境变量
- 形式: 可以通过操作系统的环境变量来设置配置项。例如:
export SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/mydb
- 用途: 在不同的部署环境中提供不同的配置,特别适合生产环境的配置管理。
4. Java System Properties
- 形式: 可以通过 JVM 的
-D
参数设置。例如:java -Dserver.port=8081 -jar myapp.jar
- 用途: 类似于命令行参数,通常用于特定的 JVM 级别配置。
5. @Value
注解
- 形式: 通过 Spring 的
@Value
注解,可以直接将外部配置注入到 Spring 管理的 Bean 中。例如:@Value("${server.port}") private int port;
- 用途: 直接从外部配置文件或环境变量中读取值并注入到类的字段中。
6. SpringApplication.setDefaultProperties
- 形式: 在代码中设置默认属性。例如:
SpringApplication app = new SpringApplication(MyApplication.class); Map<String, Object> defaults = new HashMap<>(); defaults.put("server.port", "8083"); app.setDefaultProperties(defaults); app.run(args);
- 用途: 为应用程序设置默认配置,可以在没有其他配置文件或环境变量时使用。
7. 外部配置文件
- 形式: 可以在启动时指定外部的配置文件。例如:
java -jar myapp.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
- 用途: 在不同环境中加载不同的配置文件,如开发、测试、生产环境的不同配置。
8. 配置服务器(Spring Cloud Config)
- 形式: 使用 Spring Cloud Config Server,应用程序可以从集中式配置服务器中获取配置。
- 用途: 适合微服务架构中,集中管理配置文件,并支持动态刷新配置。
9. 随机值配置
- 形式: 可以使用
${random.int}
、${random.long}
等生成随机数作为配置值。 - 用途: 用于生成随机端口、密钥等在不同环境中的不同值。
10. ConfigData
API
- **形式**: 从 Spring Boot 2.4 开始,支持使用 `ConfigData` API 来管理和加载配置文件,支持配置文件分层和多来源管理。
- **用途**: 允许更灵活的配置文件加载策略,支持组合多个配置来源。
11. YAML Profile
- **形式**: 在 `application.yml` 文件中使用 `---` 来区分不同的配置文件(Profile)。
- **用途**: 可以根据不同环境(如 `dev`、`prod`)加载不同的配置。
12. 自动加载的config
目录
- **形式**: 在应用程序目录下的 `config/` 子目录中自动加载配置文件。
- **用途**: 方便在不同环境下放置配置文件,并确保它们被自动加载。
13. 配置优先级
- **形式**: Spring Boot 会根据一定的优先级顺序来加载配置,具体顺序可以在官方文档中查看。
- **用途**: 确保在不同场景下,配置可以被正确覆盖。
通过这些外部配置方式,Spring Boot 允许你灵活地管理应用程序的配置,从而适应不同的部署环境和需求。