SpringBoot2.x基础篇:谈谈SpringBoot内提供的这几种配置绑定

简介: `SpringBoot`在不断地版本迭代中陆续提供了不同的配置参数绑定的方式,我们可以单独获取`一个配置参数`也可以将`一系列的配置`映射绑定到`JavaBean`的属性字段,下面我们来看看这几种方式的配置绑定哪一种是你最常用到的。

常见配置绑定方式

spring-boot-basic-configure-binding-away-1.png

SpringBoot在不断地版本迭代中陆续提供了不同的配置参数绑定的方式,我们可以单独获取一个配置参数也可以将一系列的配置映射绑定到JavaBean的属性字段,下面我们来看看这几种方式的配置绑定哪一种是你最常用到的。

示例配置参数

system:
  config:
    app-id: hengboy
    app-secret: yuqiyu@admin
上面是一段示例的配置参数,提供给下面的配置绑定方式来使用。

@Configuration方式绑定

当我们需要将一个配置前缀下的参数映射绑定到JavaBean的属性字段时,我们可以考虑使用@ConfigurationProperties + @Configuration注解组合的方式,使用如下所示:

/**
 * 系统配置
 *
 * @author 恒宇少年
 */
@Configuration
@ConfigurationProperties(prefix = SYSTEM_CONFIG_PREFIX)
@Data
public class SystemConfig {
    /**
     * 系统配置前缀
     */
    public static final String SYSTEM_CONFIG_PREFIX = "system.config";

    private String appId;
    private String appSecret;
}
注意事项:配置参数与 JavaBean属性之间的绑定是通过调用 JavaBean属性的 Setter方法来赋值的,所以我们需要提供对应属性字段的 Setter方法。

由于@Configuration注解被@Component修饰,所以我们在使用时只需要注入SystemConfig配置绑定映射类即可,通过Getter方法来获取对应配置参数的值。

配置扫描路径方式绑定

如果你系统中需要创建的配置映射类较多,而且每一个类都需要交付给IOC容器进行托管,那么可以考虑使用@ConfigurationPropertiesScan + @ConfigurationProperties注解组合的方式,使用如下所示:

@SpringBootApplication
@ConfigurationPropertiesScan
public class ConfigureBindingAwayApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigureBindingAwayApplication.class, args);
    }
}

我们首先需要在XxxApplication应用程序启动类上添加@ConfigurationPropertiesScan注解,表示我们需要使用自动扫描的方式来注册配置映射类,注解配置参数如下所示:

  • value:配置扫描的基础package,与basePackages作用一致,通过数组的形式来接收配置。
  • basePackages:配置扫描的基础package
  • basePackageClasses:配置基础扫描类,会将每一个扫描类所处于的package作为扫描基础package
当我们在使用 @ConfigurationPropertiesScan注解时,如果不进行自定义扫描路径,默认使用 SpringBoot应用程序扫描的 packages

使用这种方式我们配置映射类就不再需要添加@Configuration注解了,这是因为我们在使用@ConfigurationPropertiesScan注解时,会通过@Import方式来引用配置映射类的注册实现,详见:org.springframework.boot.context.properties.ConfigurationPropertiesScanRegistrar#registerBeanDefinitions,配置映射类如下所示:

/**
 * 系统配置
 *
 * @author 恒宇少年
 */
@ConfigurationProperties(prefix = SYSTEM_CONFIG_PREFIX)
@Data
public class SystemConfig {
    /**
     * 系统配置前缀
     */
    public static final String SYSTEM_CONFIG_PREFIX = "system.config";

    private String appId;
    private String appSecret;
}

构造函数方式绑定

在上面的两种方式都是通过Setter方法来进行映射字段的赋值,而构造函数绑定方式是通过构造函数来进行赋值的,我们只需要在配置映射类上添加@ConstructorBinding注解并提供对应的构造函数即可,使用方式如下所示:

/**
 * 系统配置
 *
 * @author 恒宇少年
 */
@ConfigurationProperties(prefix = SYSTEM_CONFIG_PREFIX)
@ConstructorBinding
@Getter
public class SystemConfig {
    /**
     * 系统配置前缀
     */
    public static final String SYSTEM_CONFIG_PREFIX = "system.config";

    public SystemConfig(String appId, String appSecret) {
        this.appId = appId;
        this.appSecret = appSecret;
    }

    private String appId;
    private String appSecret;
}

在之前我也写过一篇关于构造函数映射配置参数的问题,详情访问:@ConstructorBinding注解的使用

第三方类绑定

如果我们需要将配置参数映射绑定到第三方依赖内提供的JavaBean,我们该使用什么方式呢?由于接收参数的类并不是我们自己编写的,所以没有办法对.class文件源码进行修改。

这时我们可以将第三方提供的JavaBean交给IOC容器托管,然后结合@ConfigurationProperties注解来映射绑定配置参数,使用方式如下所示:

@Bean
@ConfigurationProperties(prefix = SYSTEM_CONFIG_PREFIX)
public SystemConfig systemConfig() {
    return new SystemConfig();
}
这种方式也需要第三方提供的 JavaBean有映射字段的 Setter方法,否则无法进行赋值。

我们知道通过@Bean注解修饰的方法,会将方法的返回值加入到IOC容器内,那我们在使用配置时,直接注入配置映射类就可以了。

总结

上面这几种配置绑定方式都遵循OOP实现,当然如果你只需要获取一个配置参数,使用@Value也是一个好的选择,没有更好,只有更合适,根据每一种绑定方式的特点合理的选择一个合适业务的方式。

相关文章
|
3月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
1月前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
61 0
|
2月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
60 4
|
2月前
|
Java 数据库连接 Maven
springBoot:项目建立&配置修改&yaml的使用&resource 文件夹(二)
本文档介绍了如何创建一个基于Maven的项目,并配置阿里云仓库、数据库连接、端口号、自定义启动横幅及多环境配置等。同时,详细说明了如何使用YAML格式进行配置,以及如何处理静态资源和模板文件。文档还涵盖了Spring Boot项目的`application.properties`和`application.yaml`文件的配置方法,包括设置数据库驱动、URL、用户名、密码等关键信息,以及如何通过配置文件管理不同环境下的应用设置。
300 1
|
2月前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
50 0
|
4天前
|
Java Maven Spring
SpringBoot配置跨模块扫描问题解决方案
在分布式项目中,使用Maven进行多模块开发时,某些模块(如xxx-common)没有启动类。如何将这些模块中的类注册为Spring管理的Bean对象?本文通过案例分析,介绍了两种解决方案:常规方案是通过`@SpringBootApplication(scanBasePackages)`指定扫描路径;推荐方案是保持各模块包结构一致(如com.xxx),利用SpringBoot默认扫描规则自动识别其他模块中的组件,简化配置。
SpringBoot配置跨模块扫描问题解决方案
|
11天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
56 14
|
1月前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
52 1
SpringBoot入门(7)- 配置热部署devtools工具
|
1月前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
49 2
 SpringBoot入门(7)- 配置热部署devtools工具
|
1月前
|
存储 前端开发 JavaScript
springboot中路径默认配置与重定向/转发所存在的域对象
Spring Boot 提供了简便的路径默认配置和强大的重定向/转发机制,通过合理使用这些功能,可以实现灵活的请求处理和数据传递。理解并掌握不同域对象的生命周期和使用场景,是构建高效、健壮 Web 应用的关键。通过上述详细介绍和示例,相信读者能够更好地应用这些知识,优化自己的 Spring Boot 应用。
36 3