如何在 Spring Boot 中实现自定义属性

🎬 秋野酱:《个人主页》

🔥 个人专栏:《Java专栏》《Python专栏》

⛺️心若有所向往,何惧道阻且长

文章目录

Spring Boot 自定义属性配置指南

一、引言

在 Spring Boot 应用里,application.yml 是极为常用的配置文件格式。相较于传统的 .properties 文件,它最大的优势在于能够以层次化的形式来组织配置信息,使得配置内容更加直观易懂。

接下来,本文会详细阐述如何在 Spring Boot 项目中读取和运用 application.yml 里的配置信息,并且会通过两种不同的方式展开介绍。

二、使用 @Value 注解读取单个配置项

若你仅仅需要读取某一个单独的配置项,那么使用 @Value 注解是个不错的选择。以获取程序的端口号为例:

配置文件示例(application.yml)

复制代码
server:
  port: 9999

代码示例

复制代码
@Slf4j
@SpringBootTest
class SpringAppApplicationTests {
    @Value("${server.port}")
    private String port;

    @Test
    public void test() {
        log.info("端口号:{}", port);
    }
}

设置默认值

此外,你还能为属性设置默认值。当配置文件中不存在该属性时,程序就会读取默认值。示例如下:

复制代码
@Value("${server.port:8888}")
private String port;

三、使用 @ConfigurationProperties 处理复杂配置

要是面对多个配置项或者复杂的配置结构,使用 @ConfigurationProperties 注解会是更佳的解决方案。

简单复杂配置示例(application.yml)

复制代码
user:
  username: "admin"
  #  password: "123123"

对应的 Java 类

复制代码
@Data
@Component
@ConfigurationProperties(prefix = "user") // 设置属性前缀
public class UserProperties {
    private String username;
    private String password = "123456"; // 设置默认值
}

测试代码

复制代码
@Slf4j
@SpringBootTest
class SpringAppApplicationTests {
    @Resource
    private UserProperties userProperties;

    @Test
    public void test() {
        log.info("用户名:{}", userProperties.getUsername());
        log.info("密码:{}", userProperties.getPassword());
    }
}

更复杂属性配置示例(application.yml)

对于更为复杂的属性配置,可按如下方式操作:

复制代码
user:
  name: "秋野"
  age: 21
  birthday: "2003-8-28"
  vip: true
  hobbyList:
    - "敲代码"
    - "写代码"
    - "打游戏"
  ageArray:
    - 18
    - 19
    - 20
  propList:
    - username: "张三"
      password: "18"
      age: 18
      birthday: "1990-01-01"
    - username: "李四"
      password: "18"

对应的 Java 类

复制代码
@Data
@Component
@ConfigurationProperties(prefix = "user")
public class UserProperties {
    private String name;
    private Integer age;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
    private Boolean vip;
    private List<String> hobbyList;
    private List<Integer> ageArray;
    private List<UserProperties> propList;
}

四、总结

综上所述,对于简单的配置需求,使用 @Value 注解可以快速实现配置读取。而当遇到复杂的配置结构时,@ConfigurationProperties 注解则能更好地应对,帮助你更高效地管理和使用配置信息。

相关推荐
AI-好学者4 分钟前
阶段一-图数据库基础与PropertyGraph模型
数据库·rag·knowledge graph·graphrag
其实防守也摸鱼1 小时前
运维--学习阶段问题解答(1)(自测)
linux·运维·服务器·数据库·学习·自动化·命令模式
懒鸟一枚2 小时前
深入理解 Linux 内存、Swap 交换分区与分页机制的关系
java·linux·数据库
龙仔7252 小时前
SQL Server 创建只读账号完整操作(分两种场景:SSMS图形界面 + T-SQL脚本)
数据库·sql·oracle
霁月的小屋2 小时前
生产环境中的事务实践——银行系统上线记(四)
数据库
Database_Cool_2 小时前
AI 应用数据底座首选:阿里云 PolarDB 为大模型 RAG 提供一体化支撑
数据库·阿里云
玖玥拾2 小时前
C# 语言进阶(十五)C# 游戏服务端 MySQL 数据库
服务器·开发语言·网络·数据库·mysql·c#
我命由我123453 小时前
执行 Gradle 指令报错,无法将“grep”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
考虑考虑3 小时前
Sentinel安装
java·后端·微服务
碎碎念_4923 小时前
SpringBoot + Vue 前后端分离从 0 到 1 完整环境配置流程
vue.js·spring boot·后端