说说在 Spring Boot 中如何自定义与使用属性

Spring Boot 应用本身的属性值(比如每页记录数),一般做成自定义的应用属性,放置在 application.yml 中。

(1)配置自定义属性

在 application.yml 中,自定义一个名为 pageSize 的属性,用于存放 整个应用的 “每页记录数” 参数。

app:
  data:
    pageSize: 30

上面的这些配置都是自定义的,而且支持任意嵌套。

(2)控制器层

配置好自定义属性之后,就可以直接在业务的控制器层 Controller 使用这些属性。

@ConfigurationProperties(prefix = "app.data")
public class OrderController {

    private int pageSize = 20;

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }


    @GetMapping("/orders")
    public String orders(@AuthenticationPrincipal User user, Model model) {
        Pageable pageable= PageRequest.of(0,pageSize);
        ...
        return "orders";
    }
  ...
}

首先为 Controller 类添加 @ConfigurationProperties 注解。该注解的 prefix 属性设置为自定义属性的前缀,这样 Spring Boot 在获取 pageSize 属性时,就会自动加上该前缀,从而得到我们想要的自定义属性值。

设置断点后,请求该 URL 地址,就会发现 pageSize 的值是我们之前在 application.yml 中所定义的值:

(3)自定义属性类

更好的一种方式是自定义一个应用属性类,专门用来持有整个应用的自定义属性。这样做的好处是:

  1. 避免自定义属性代码与应用控制器代码杂糅在一起,不好维护;
  2. 不同的应用控制器,可以共享应用属性类中的通用参数。

首先定义一个公共的应用属性类,内部包含需要的公共属性(比如 pageSize):

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 应用通用属性
 *
 * @author Deniro Lee
 */
@Component
@ConfigurationProperties(prefix = "app.data")
@Data
public class AppProps {
    private int pageSize = 20;

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
}

然后在应用的 Controller 类中载入 AppProps 属性类:

private AppProps appProps;

public OrderController(AppProps appProps) {
    this.appProps = appProps;
}

@GetMapping("/orders")
public String orders(@AuthenticationPrincipal User user, Model model) {
    Pageable pageable= PageRequest.of(0,appProps.getPageSize());
    ...
    return "orders";
}

运行结果:

通过断点可以看到,在请求时, appProps 的 getPageSize() 方法会返回我们之前在配置文件中所定义的值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值