使用Spring Boot全局配置文件设置属性时:
- 如果配置属性是Spring Boot已有属性,例如服务端口server.port,那么Spring Boot内部会自动扫描并读取这些配置文件中的属性值并覆盖默认属性。
- 如果配置的属性是用户自定义属性,例如自定义的Person实体类属性,还必须在程序中注入这些配
置属性方可生效。
属性注入常用注解
- @Configuration:声明一个类作为配置类
- @Bean:声明在方法上,将方法的返回值加入Bean容器
- @Value:属性注入
- @ConfigurationProperties(prefix = “jdbc”):批量属性注入
- @PropertySource(“classpath:/jdbc.properties”)指定外部属性文件,在类上添加
@Value属性值注入
- 引入数据源连接依赖
<dependency>
<groupId>com.github.drtrang</groupId>
<artifactId>druid-spring-boot2-starter</artifactId>
<version>1.1.10</version>
</dependency>
- application.properties添加信息
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/springboot
jdbc.username=root
jdbc.password=123
- 配置数据源
创建JdbcConfiguration类: 使用spring中的value注解对每个属性进行注入,用bean注解将返回值添加到容器中
@Configuration
public class JdbcConfiguration {
@Value("${jdbc.url}")
String url;
@Value("${jdbc.driverClassName}")
String driverClassName;
@Value("${jdbc.username}")
String username;
@Value("${jdbc.password}")
String password;
@Bean
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(url);
dataSource.setDriverClassName(driverClassName);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
@ConfigurationProperties批量注入
- 新建 JdbcProperties ,用来进行属性注入:
@ConfigurationProperties(prefix = "jdbc") //这里需要定义出在application文件中定义属 性值得前缀信息
@Data
public class JdbcProperties {
private String url;
private String driverClassName;
private String username;
private String password;
}
注:添加@ConfigurationProperties注解后有警告:springboot 配置注释处理器未配置(编写配置文件此时无提示)
添加spring-boot-configuration-processor后出现提示,加完依赖后通过Ctrl+F9来使之生效
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
接着发现,仍然有红色警告
@EnableConfigurationProperties 是 Spring Boot 提供的一个注解,使用该注解用于启用应用对另
外一个注解 @ConfigurationProperties 的支持,,用于设置一组使用了注解@ConfigurationProperties 的类,用于作为 bean 定义注册到容器中。
2. application.properties添加信息
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/springboot
jdbc.username=root
jdbc.password=123
注意:将配置信息添加到这里,通过前缀进行区分,进行引用
第三方配置
除了 @ConfigurationProperties 用于注释类之外,还可以在公共 @Bean 方法上使用它。当要将属
性绑定到控件之外的第三方组件时,这样做特别有用。
效果演示:
创建一个其他组件类
@Data
public class AnotherComponent {
private boolean enabled;
private InetAddress remoteAddress;
}
创建MyService
@Configuration
public class MyService {
@ConfigurationProperties("another")
@Bean
public AnotherComponent anotherComponent(){
return new AnotherComponent();
}
}
配置文件
another.enabled=true
another.remoteAddress=192.168.10.11
通过测试可以获得AnotherComponent组件的实例对象。
松散绑定
Spring Boot使用一些宽松的规则将环境属性绑定到@ConfigurationProperties bean,因此环境属性名和bean属性名之间不需要完全匹配
例如属性类:
@Data
@Component
@ConfigurationProperties("acme.my-person.person")
public class OwnerProperties {
private String firstName;
}
acme:
my-person:
person:
first-name: 泰森