Spring Boot的常规配置

本文介绍SpringBoot中的配置机制,包括自定义属性、变更默认属性值、自定义配置文件及属性引用等,帮助开发者掌握核心配置技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 众所周知 Spring Boot 的核心:约定大于配置。这句话用于 Spring Boot 时可以从如下两点来理解:

开发人员仅需规定应用中不符约定的部分。
在没有规定配置的地方,采用默认配置,以力求最简配置为核心思想。

 其实,总的来讲,上面这两条都遵循了推荐默认配置的思想;当存在特殊需求时候,自定义下配置即可。定义些默认配置办不到的需求即可,剩下的配置,默认就帮助你完成,大大减少配置工作,这就是所谓的 “约定”。

 既然推荐使用默认配置,那么在项目中就肯定存在大量的配置(此外还内置了一个习惯性的配置,让你无需手动进行配置),以让你的项目快速运行起来。所以,我们要想把 Spring Boot 玩的溜,就要懂得如何开启各个功能模块的默认配置,这就需要清楚 Spring Boot 的配置文件 src/main/java/resources/application.yml(若不存在,请自行创建)。

Spring Boot 默认的全局配置文件有四类,按加载的先后顺序分别是:application.properties、application.xml、application.yml、application.yaml,若存在相同的属性名,则以前者的值为准。(Spring官方推荐使用的格式是 .yml 格式,目前官网实例都是使用 yml 格式进行配置讲解的)应用启动时会自动加载此文件,无需手动引入。

一、自定义属性

在 application.yml 自定义一组属性:

student:
  name: 李四
  age: 20

 即可使用 @Value(“student.name”) 为成员变量注入值。但当自定义属性很多时就需要注入很多次,Spring Boot 提供了基于类型安全的配置方式 @ConfigurationProperties 将配置文件中的属性和一个 Bean 的属性关联,从而实现类型安全的配置。

@ConfigurationProperties(prefix = "student")
public class StudentProperties {
    /**
     * 姓名,默认为:张三
     */
    private String name = "张三";

    /**
     * 年龄,默认为:18
     */
    private Integer age = 18;
	
	// 省略 getter、setter
}

 上述做法仅把配置信息封装到的 StudentProperties 实体类中,还并没有真正成为 Bean。

@Configuration
@EnableConfigurationProperties(StudentProperties.class)
public class StudentAutoConfiguration {

    private final StudentProperties props;

    public StudentAutoConfiguration(StudentProperties props) {
        this.props = props;
    }
}

 完成上述做法,就真正把 StudentProperties 实例交给了 Spring 管理,即 Spring Bean。即可继续在本类中通过使用 StudentProperties 实例的属性值构建其他 Bean,亦可在其他 Bean 中直接注入 StudentProperties 实例。

 还有一种实现上述功能的方式则是:

@Component
@ConfigurationProperties(prefix = "student")
@EnableConfigurationProperties(StudentProperties.class)
public class StudentProperties {
 
    private String name = "张三";
	private Integer age = 18;
	// 省略 getter、setter
}

下表为两个注解的区别。

@ConfigurationProperties@Value
功能批量注入配置文件中的属性一个个指定
松散绑定(松散语法)支持不支持
SpEL不支持支持
JSR303数据校验支持不支持
复杂类型封装支持不支持

二、变更默认属性值

 既然要变更默认属性的值,那么就需要知道该默认属性名才行,否则就不存在所谓的变更一说了。搭建 Spring Boot 项目时,会引入 org.springframework.boot:spring-boot-starter 包,该包依赖了 spring-boot-autoconfigure 包,顾名思义,该包内肯定存在大量的 @EnableConfigurationProperties,可直接到该包下获取属性名。
 值得一提的是,我们常在 application.properties 文件中变更某属性值时,仅才输入属性名的一部分,开发工具会自动联想出与之相关的所有的属性,如下图示例:
springboot自动关联配置属性
 其实质是通过加载 META-INF/spring-configuration-metadata.json 描述文件来提示与之相关的属性名及其默认值。当自定义属性时,可通过依赖以来如下jar包,编译后自动生成该描述文件。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>

三、自定义配置文件

 虽然 Spring Boot 为我们提供了application 配置文件,但实际上很多时候我们却会自定义配置文件,这些文件就需要我们进行手动加载,SpringBoot 是不会自动识别这些文件的,所以还需要在上述基础上再添加一步:

@ConfigurationProperties(prefix = "student")
@PropertySource("classpath:config/student.yml")
public class StudentProperties {
 	// 省略
}

 表示在 resources 下自定义了一个 config/student.yml 配置文件。

四、属性引用

 可通过使用 SpEL 表达式来完成属性值的引用,例如:

student:
  name: 李四
  age: 20
  detail: ${student.name}-${student.age}

五、随机数

 配置文件中 ${random} 可以用来生成各种不同类型的随机值,从而简化了代码生成的麻烦,例如 生成 int 值、long 值或者 string 字符串。

demo:
  secret: ${random.value}
  number: ${random.int}
  bignumber: ${random.long}
  uuid: ${random.uuid}
  number:
    less:
      than:
        ten: ${random.int(10)}
    in:
      range: ${random.int[1024, 65536]}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值