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也是一个好的选择,没有更好,只有更合适,根据每一种绑定方式的特点合理的选择一个合适业务的方式。

相关文章
|
5天前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
3月前
|
Java Spring
Spring boot 运行服务jar外配置配置文件方式总结
Spring boot 运行服务jar外配置配置文件方式总结
487 0
|
3月前
|
Java 应用服务中间件 开发者
Java面试题:解释Spring Boot的优势及其自动配置原理
Java面试题:解释Spring Boot的优势及其自动配置原理
101 0
消息中间件 缓存 监控
81 0
|
1月前
|
IDE Java 开发工具
还在为繁琐的配置头疼吗?一文教你如何用 Spring Boot 快速启动,让开发效率飙升,从此告别加班——打造你的首个轻量级应用!
【9月更文挑战第2天】Spring Boot 是一款基于 Spring 框架的简化开发工具包,采用“约定优于配置”的原则,帮助开发者快速创建独立的生产级应用程序。本文将指导您完成首个 Spring Boot 项目的搭建过程,包括环境配置、项目初始化、添加依赖、编写控制器及运行应用。首先需确保 JDK 版本不低于 8,并安装支持 Spring Boot 的现代 IDE,如 IntelliJ IDEA 或 Eclipse。
83 5
|
2月前
|
安全 前端开发 Java
Web端系统开发解决跨域问题——以Java SpringBoot框架配置Cors为例
在Web安全上下文中,源(Origin)是指一个URL的协议、域名和端口号的组合。这三个部分共同定义了资源的来源,浏览器会根据这些信息来判断两个资源是否属于同一源。例如,https://www.example.com:443和http://www.example.com虽然域名相同,但由于协议和端口号不同,它们被视为不同的源。同源(Same-Origin)是指两个URL的协议、域名和端口号完全相同。只有当这些条件都满足时,浏览器才认为这两个资源来自同一源,从而允许它们之间的交互操作。
Web端系统开发解决跨域问题——以Java SpringBoot框架配置Cors为例
|
2月前
|
缓存 前端开发 Java
"揭秘!SpringBoot携手Nginx,性能飙升秘籍大公开:轻松掌握配置优化,让你的应用快如闪电!"
【8月更文挑战第11天】随着微服务架构的发展,SpringBoot成为构建RESTful API的首选,Nginx则作为高性能的反向代理服务器提升应用性能。本文将探讨两者如何协同工作,包括Nginx的负载均衡策略、静态资源缓存及数据压缩配置;同时讨论SpringBoot的线程池优化、缓存策略及性能监控。通过这些方法,帮助开发者显著提高系统的整体性能和可用性。
74 1
|
2月前
|
Java Spring 开发者
解锁 Spring Boot 自动化配置的黑科技:带你走进一键配置的高效开发新时代,再也不怕繁琐设置!
【8月更文挑战第31天】Spring Boot 的自动化配置机制极大简化了开发流程,使开发者能专注业务逻辑。通过 `@SpringBootApplication` 注解组合,特别是 `@EnableAutoConfiguration`,Spring Boot 可自动激活所需配置。例如,添加 JPA 依赖后,只需在 `application.properties` 配置数据库信息,即可自动完成 JPA 和数据源设置。这一机制基于多种条件注解(如 `@ConditionalOnClass`)实现智能配置。深入理解该机制有助于提升开发效率并更好地解决问题。
49 0
|
2月前
|
缓存 Java 数据库连接
Spring Boot 资源文件属性配置,紧跟技术热点,为你的应用注入灵动活力!
【8月更文挑战第29天】在Spring Boot开发中,资源文件属性配置至关重要,它让开发者能灵活定制应用行为而不改动代码,极大提升了可维护性和扩展性。Spring Boot支持多种配置文件类型,如`application.properties`和`application.yml`,分别位于项目的resources目录下。`.properties`文件采用键值对形式,而`yml`文件则具有更清晰的层次结构,适合复杂配置。此外,Spring Boot还支持占位符引用和其他外部来源的属性值,便于不同环境下覆盖默认配置。通过合理配置,应用能快速适应各种环境与需求变化。
34 0
|
3月前
|
监控 NoSQL Java
Spring Boot Actuator 使用和常用配置
Spring Boot Actuator 使用和常用配置
67 5