目标使用@ConfigurationProperties实现配置文件配置项读取和应用
分析:
需求:将配置文件中的配置项读取到一个对象中;
实现:可以使用Spring Boot提供的注解@Configurationproperties,该注解可以将SpringBoot的配置文件(默认必须为.properties或.yml)中的配置项读取到一个对象中。
实现步骤:
1.创建配置项类JdbcProperties类,在该类名上添加 @ConfigurationProperties(使用该注解有可能出错
需要加入以下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<!-- 不传递依赖-->
<optional>true</optional>
</dependency>
);
2.将jdbc.properties修改名称为application.properties;
jdbc.driverClassName = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/tables_mysql
jdbc.username=dff
jdbc.password=1234
3.将jdbcProperties对象注入到xmld;
注意:
ConfigurationProperties从application配置文件中读取配置项
prefix 表示 配置项的前缀
配置项类中的类变量名必须要与 前缀之后的配置项名称保持 松散绑定(相同)
Relaxed binding:松散绑定
a.不严格要求属性文件的属性名与成员变量一直。支持驼峰,中划线,下划线等等转换,甚至支持
对象引导。比如:user.friend.name:表示的是user对象中的friend属性中的name属性,显然
friend也是对象。@value注解难以完成这样的注入方式
b.meta-data support:元数据支持,帮助IDE生成属性提示(写开源框架会用到)
1.JdbcProperties.java
@ConfigurationProperties(prefix="jdbc")
public class JdbcProperties {
String driverClassName;
String url;
String username;
String password;
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
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;
}
}
2.xmld.java
@Configuration
@EnableConfigurationProperties(JdbcProperties.class)(使用JdbcProperties.class中的属性)
@ComponentScan("com.example.springaod.sdfe")
public class xmld {
@Bean
public DataSource dataSource(JdbcProperties jdbcProperties){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(jdbcProperties.getDriverClassName());
dataSource.setUrl(jdbcProperties.getUrl());
dataSource.setUsername(jdbcProperties.getUserName());
dataSource.setPassword(jdbcProperties.getPassword());
return dataSource;
}
}
3.更加简便的写法
之前的JdbcProperties还是需要只不过没有使用注解
jdbc.之后中的属性名必须与DruidDataSourcea()中set之后的名称相同第一个字母小写。
@Configuration
@ComponentScan("com.example.springaod.sdfe")
public class xmld {
@Bean
@ConfigurationProperties(prefix ="jdbc")
public DataSource dataSource(){
return new DruidDataSource();
}
}
4.测试
小结