全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-18 8 分钟 ✍️ juanwangdev

SpringBoot自定义配置属性与@Value

SpringBoot 支持多种方式读取自定义配置。

@Value注解

基础用法

Java
@Service
public class MyService {

    @Value("${app.name}")
    private String appName;

    @Value("${app.timeout:3000}")    // 默认值
    private int timeout;

    @Value("${app.enabled:true}")
    private boolean enabled;
}

配置文件

YAML
app:
  name: my-application
  timeout: 5000
  enabled: true

@Value高级用法

SpEL表达式

Java
@Value("#{'${app.servers}'.split(',')}")
private List<String> servers;

@Value("#{systemProperties['user.home']}")
private String userHome;

@Value("#{T(java.lang.Math).random() * 100}")
private double randomValue;

配置示例

YAML
app:
  servers: server1,server2,server3

@ConfigurationProperties

定义配置类

Java
@Data
@ConfigurationProperties(prefix = "app")
public class AppConfig {

    private String name;
    private int timeout;
    private boolean enabled;
    private List<String> servers;
    private Map<String, String> features;
}

启用配置绑定

Java
@SpringBootApplication
@EnableConfigurationProperties(AppConfig.class)
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

配置文件

YAML
app:
  name: my-app
  timeout: 5000
  enabled: true
  servers:
    - server1
    - server2
  features:
    cache: redis
    auth: jwt

使用配置类

Java
@Service
public class MyService {

    @Autowired
    private AppConfig appConfig;

    public void process() {
        String name = appConfig.getName();
        List<String> servers = appConfig.getServers();
    }
}

嵌套配置对象

Java
@Data
@ConfigurationProperties(prefix = "app")
public class AppConfig {

    private String name;
    private Database database;
    private Cache cache;

    @Data
    public static class Database {
        private String url;
        private String username;
        private int maxPoolSize;
    }

    @Data
    public static class Cache {
        private String type;
        private int ttl;
    }
}
YAML
app:
  name: my-app
  database:
    url: jdbc:mysql://localhost/db
    username: root
    max-pool-size: 20
  cache:
    type: redis
    ttl: 3600

@Value vs @ConfigurationProperties

特性@Value@ConfigurationProperties
松散绑定不支持支持
SpEL支持不支持
复杂对象不支持支持
校验不支持支持
元数据提示不支持支持

配置校验

Java
@Data
@ConfigurationProperties(prefix = "app")
@Validated
public class AppConfig {

    @NotBlank
    private String name;

    @Min(1000)
    @Max(10000)
    private int timeout;

    @Email
    private String adminEmail;
}

松散绑定示例

YAML
# 以下写法都能绑定到 myPropertyName
app:
  my-property-name: value1
  my-propertyName: value2
  myPropertyName: value3
  MY_PROPERTY_NAME: value4

配置文件加载顺序

Java
@Service
public class MyService {

    // 优先级:命令行 > 环境变量 > yml > properties
    @Value("${app.name}")
    private String appName;
}

建议复杂配置使用@ConfigurationProperties,简单配置使用@Value。

要点总结

  • @Value读取单个配置,支持默认值
  • @ConfigurationProperties批量绑定配置
  • 松散绑定支持多种命名格式
  • @Validated支持配置校验
  • 嵌套对象实现复杂配置结构

📝 发现内容有误?点击此处直接编辑

← 上一篇 SpringBoot多环境配置dev与prod
下一篇 → SpringBoot配置文件properties与yml
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库