美文网首页程序员
说说在 Spring Boot 中如何自定义与使用属性

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

作者: deniro | 来源:发表于2020-10-29 20:31 被阅读0次

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() 方法会返回我们之前在配置文件中所定义的值。

相关文章

网友评论

    本文标题:说说在 Spring Boot 中如何自定义与使用属性

    本文链接:https://www.haomeiwen.com/subject/oqfjpktx.html