跳到主要内容

Spring Boot 配置

介绍

Spring Boot 是一个用于快速构建 Spring 应用程序的框架,它通过自动配置和约定优于配置的原则,简化了开发过程。配置是 Spring Boot 的核心功能之一,它允许开发者灵活地管理应用程序的行为,而无需修改代码。本文将详细介绍 Spring Boot 的配置机制,包括配置文件、外部化配置、环境变量等。

配置文件

Spring Boot 支持多种配置文件格式,最常见的是 application.propertiesapplication.yml。配置文件用于定义应用程序的属性,例如数据库连接、服务器端口等。

1. application.properties

application.properties 是 Spring Boot 默认的配置文件格式,使用键值对的形式定义属性。

properties
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret

2. application.yml

application.yml 是另一种常见的配置文件格式,使用 YAML 语法,结构更加清晰。

yaml
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: secret
提示

YAML 文件对缩进敏感,请确保使用正确的缩进格式。

外部化配置

Spring Boot 允许将配置外部化,这意味着配置可以来自多个来源,例如环境变量、命令行参数、外部配置文件等。

1. 环境变量

Spring Boot 支持通过环境变量来覆盖配置文件中的属性。例如,可以通过设置环境变量 SPRING_DATASOURCE_URL 来覆盖 spring.datasource.url 的值。

bash
export SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/mydb

2. 命令行参数

在启动应用程序时,可以通过命令行参数来覆盖配置文件中的属性。

bash
java -jar myapp.jar --server.port=9090

3. 外部配置文件

Spring Boot 允许将配置文件放在应用程序外部的特定位置,例如 /config 目录或当前工作目录。

bash
/config/application.properties
/application.properties
备注

外部配置文件的优先级高于应用程序内部的配置文件。

配置属性绑定

Spring Boot 支持将配置文件中的属性绑定到 Java 对象中,通常使用 @ConfigurationProperties 注解。

示例:绑定属性到 Java 对象

假设我们有一个配置文件 application.yml

yaml
app:
name: MyApp
version: 1.0.0

我们可以创建一个 Java 类来绑定这些属性:

java
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "app")
public class AppConfig {
private String name;
private String version;

// Getters and Setters
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getVersion() {
return version;
}

public void setVersion(String version) {
this.version = version;
}
}

在控制器或服务中,可以通过注入 AppConfig 来访问这些属性:

java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AppController {

@Autowired
private AppConfig appConfig;

@GetMapping("/app-info")
public String getAppInfo() {
return "App Name: " + appConfig.getName() + ", Version: " + appConfig.getVersion();
}
}

实际案例

假设我们正在开发一个简单的 Web 应用程序,需要配置数据库连接和服务器端口。我们可以使用 application.yml 文件来定义这些配置:

yaml
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: secret

在应用程序启动时,Spring Boot 会自动读取这些配置并应用到相应的组件中。

总结

Spring Boot 的配置管理功能非常强大且灵活,支持多种配置方式和来源。通过本文的介绍,你应该已经掌握了如何使用配置文件、外部化配置以及如何将配置属性绑定到 Java 对象中。这些功能可以帮助你更好地管理和控制应用程序的行为。

附加资源

练习

  1. 创建一个 Spring Boot 项目,并使用 application.yml 文件配置服务器端口和数据库连接。
  2. 尝试通过环境变量覆盖配置文件中的属性。
  3. 创建一个 Java 类并使用 @ConfigurationProperties 注解绑定配置文件中的属性。