问答 百科手机端

@ spring boot常用评论的配置属性

2023-05-14 09:20

一、简单的源码分析

Spring源码中大量使用了ConfigurationProperties注解,比如server.port就是由该注解获取到的,通过与其他注解配合使用,能够实现Bean的按需配置。

该注解有一个prefix属性,通过指定的前缀,绑定配置文件中的配置,通过如下源码可以看出,该注解可以放在类上,也可以放在方法上。

@ spring boot常用评论的配置属性

二、@ConfigurationProperties时使用的注意事项

1.前缀定义了哪些外部属性将绑定到类的字段上;

2. 根据 Spring Boot 宽松的绑定规则,类的属性名称必须与外部属性的名称匹配;

Spring 宽松绑定规则 (relaxed binding,Spring使用一些宽松的绑定属性规则。因此,以下变体都将绑定到 hostName 属性上:
hostName、hostname、host-name、host_name、HOST_NAME等。

3. 我们可以简单地用一个值初始化一个字段来定义一个默认值;

4. 类本身可以是包私有的;

5. 类的字段必须有公共 setter 方法;

三、实例应用

@ConfigurationProperties的使用有两种方式。

配置文件内容,这里用的是*.poperties做的案例,实际使用中组好使用*.yml文件。

spring.datasource.url=jdbc:mysql://127.0.0.1:8888/test?useUnicode=false&autoReconnect=true&characterEncoding=utf-8 spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

java代码:

@ConfigurationProperties(prefix = 'spring.datasource') @Component public class DatasourcePro { private String url; private String username; private String password; // 配置文件中是driver-class-name, 转驼峰命名便可以绑定成 private String driverClassName; private String type; public String getUrl { return url; } public void setUrl(String url) { this.url = url; } public String getUsername { return username; } public void setUsername(String username) { this.username = username; } public String getPassword { return password; } public void setPassword(String password) { this.password = password; } public String getDriverClassName { return driverClassName; } public void setDriverClassName(String driverClassName) { this.driverClassName = driverClassName; } public String getType { return type; } public void setType(String type) { this.type = type; } }

controller中的使用:

@Controller @RequestMapping(value = '/config') public class ConfigurationPropertiesController { @Autowired private DatasourcePro datasourcePro; @RequestMapping('/test') @ResponseBody public Map<String, Object> test { Map<String, Object> map = new HashMap<> ; map.put('url', datasourcePro.getUrl ); map.put('userName', datasourcePro.getUsername ); map.put('password', datasourcePro.getPassword ); map.put('className', datasourcePro.getDriverClassName ); map.put('type', datasourcePro.getType ); return map; } }

第二种作用与方法上:

java POJO:

public class Datasource { private String url; private String username; private String password; // 配置文件中是driver-class-name, 转驼峰命名便可以绑定成 private String driverClassName; private String type; public String getUrl { return url; } public void setUrl(String url) { this.url = url; } public String getUsername { return username; } public void setUsername(String username) { this.username = username; } public String getPassword { return password; } public void setPassword(String password) { this.password = password; } public String getDriverClassName { return driverClassName; } public void setDriverClassName(String driverClassName) { this.driverClassName = driverClassName; } public String getType { return type; } public void setType(String type) { this.type = type; } }

配置类上:

@Configuration public class DruidDataSourceConfig { /** * DataSource 配置 * @return */ @ConfigurationProperties(prefix = 'spring.datasource.druid.read') @Bean(name = 'readDruidDataSource') public DataSource readDruidDataSource { return new DruidDataSource ; } }

四、拓展

@ spring boot常用评论的配置属性

1. 通过源码可以看大有 ignoreInvalidFields和ignoreUnknownFields两个属性。其中

ignoreInvalidFields:表示是文件*.yml提供了DataSource类无法转换的属性,默认情况下,Spring Boot 将会启动失败,并抛出异常:

ignoreUnknownFields:表示文件*.yml提供了DataSource类无法识别的属性;

2.启动时校验 @ConfigurationProperties、Duration、DataSize、Deprecated(@DeprecatedConfigurationProperty)。

详情可参考https://blog.csdn.net/yusimiao/article/details/97622666博客

总结:

1. @ConfigurationProperties 和 @value 有着相同的功能,但是 @ConfigurationProperties的写法更为方便

2. Spring Boot 的@ConfigurationProperties注解在绑定类型安全的 Java Bean 时是非常强大的,我们可以配合其注解属性和

@DeprecatedConfigurationProperty注解获取到更友好的编程方式,同时这样让我们的配置更加模块化。

热门