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

Spring Boot 随机值与占位符

Spring Boot支持配置中使用随机值和占位符引用其他属性。

随机值配置

随机数生成

YAML
my:
  random:
    int: ${random.int}
    int-range: ${random.int[100,200]}     # 100-200随机整数
    long: ${random.long}
    uuid: ${random.uuid}                   # UUID字符串
    value: ${random.value}                 # 随机字符串

使用示例

Java
@ConfigurationProperties(prefix = "my.random")
public class RandomProperties {

    private int intRange;
    private String uuid;

    // getters and setters
}
YAML
# 常见用途
app:
  id: ${random.uuid}
  secret-key: ${random.value}
  port: ${random.int[1024,65535]}

占位符引用

引用其他属性

YAML
app:
  name: myapp
  version: 1.0.0
  full-name: ${app.name}-${app.version}   # myapp-1.0.0

database:
  url: jdbc:mysql://${db.host}:${db.port}/mydb
  host: localhost
  port: 3306

默认值

YAML
# 如果属性不存在,使用默认值
app:
  name: ${APP_NAME:default-name}
  port: ${PORT:8080}
  timeout: ${TIMEOUT:3000}

# 冒号后为默认值
# 格式:${property-name:default-value}

引用系统属性和环境变量

YAML
# 系统属性
app:
  home: ${java.io.tmpdir}
  version: ${java.specification.version}

# 环境变量
app:
  user: ${USER}
  home-dir: ${HOME}

占位符解析器

Java
// PropertyPlaceholderConfigurer解析占位符
// EnvironmentPlaceholderResolver处理${...}格式

public class PropertySourcesPlaceholderConfigurer extends PlaceholderConfigurerSupport {

    // 解析${property:default}
    // 1. 从Environment查找property
    // 2. 未找到则使用default
    // 3. 无default且property不存在则抛异常
}

@Value中使用占位符

Java
@Component
public class MyService {

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

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

    @Value("${random.uuid}")
    private String id;
}

配置文件组合使用

YAML
# 基础配置
server:
  port: 8080

# 开发环境
spring:
  config:
    activate:
      on-profile: dev

server:
  port: ${SERVER_PORT:8081}  # 环境变量优先,默认8081

# 生产环境
spring:
  config:
    activate:
      on-profile: prod

server:
  port: ${SERVER_PORT}       # 无默认值,必须提供环境变量

占位符嵌套

YAML
# 占位符可嵌套
app:
  env: prod
  config-dir: /config/${app.env}/
  full-path: ${app.config-dir}settings.yml  # /config/prod/settings.yml

随机值底层实现

Java
// RandomValuePropertySource
public class RandomValuePropertySource extends PropertySource<Void> {

    public static final String RANDOM_PROPERTY_SOURCE_NAME = "random";

    @Override
    public Object getProperty(String name) {
        if (name.startsWith("random.")) {
            // 解析random.int、random.uuid等
            return generateRandomValue(name);
        }
        return null;
    }
}

随机值应用场景

场景示例
应用ID${random.uuid}
随机端口${random.int[1024,65535]}
密钥生成${random.value}
测试数据${random.int}

注意事项

YAML
# 占位符未定义且无默认值,启动报错
app:
  name: ${undefined-property}  # 报错

# 空字符串作为默认值
app:
  name: ${undefined-property:}  # 默认空字符串

要点总结

  • ${random.int/long/uuid/value}生成随机值
  • ${property}引用其他配置属性
  • ${property:default}指定默认值
  • 占位符支持嵌套和组合
  • @Value中可使用占位符和随机值
  • 未定义属性无默认值会报错

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

← 上一篇 Spring Boot 配置文件加载优先级
下一篇 → Spring Boot spring.factories配置
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

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

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