SpringBoot使用一个全局的配置文件,配置文件名的
application.properties
application.yml
配置文件的作用 : SpringBoot底层都给我们配置好了,但有时候我们需要修改一些默认配置。
SpringBoot提供了简单的配置注入功能,可以为bean对象直接注入默认值。
以下是配置注入相关流程。
@ConfigurationProperties(prefix = "****")
1. 创建接收配置内容的实体
实体类 Person
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 将配置文件中的配置,映射到这个组件中
* @ConfigurationProperties: 告诉SpringBoot将本类所有属性和配置文件中相关的配置进行绑定
* prefix = "person" : 配置文件中那个下面的所有属性进行一一映射
* 只有这个这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties的功能
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String , Object> map;
private List<Object> list;
private Dog dog;
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Boolean getBoss() {
return boss;
}
public void setBoss(Boolean boss) {
this.boss = boss;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public Map<String, Object> getMap() {
return map;
}
public void setMap(Map<String, Object> map) {
this.map = map;
}
public List<Object> getList() {
return list;
}
public void setList(List<Object> list) {
this.list = list;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder( "{\"Person\":{" );
sb.append( "\"lastName\":\"" )
.append( lastName ).append( '\"' );
sb.append( ",\"age\":" )
.append( age );
sb.append( ",\"boss\":" )
.append( boss );
sb.append( ",\"birth\":\"" )
.append( birth ).append( '\"' );
sb.append( ",\"map\":" )
.append( map );
sb.append( ",\"list\":" )
.append( list );
sb.append( ",\"dog\":" )
.append( dog );
sb.append( "}}" );
return sb.toString();
}
}
实体类 Dog
public class Dog {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder( "{\"Dog\":{" );
sb.append( "\"name\":\"" )
.append( name ).append( '\"' );
sb.append( ",\"age\":" )
.append( age );
sb.append( "}}" );
return sb.toString();
}
}
2.在配置文件中存入配置信息
application.yml
server:
port: 8081
person:
lastName: zhangsan # 也可写成(松散语法) last-name:zhansang
age: 18
boss: false
birth: 2017/12/12
map: {k1: v1, k2 : 12}
list:
- lisi
- zhaoliu
dog:
name: 史努比
age: 2
使用的时候通过自动注入可以获取默认的配置信息(从新new不会存在注入的配置信息!原因是没有赋值。@ConfigurationProperties做了那些工作就很清楚了。)。
@@Value( "${****.fieldName}" )
1.创建实体类
实体类 Cat
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Cat {
@Value( "${cat.name}" )
private String name;
@Value( "${cat.age}" )
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder( "{\"Cat\":{" );
sb.append( "\"name\":\"" )
.append( name ).append( '\"' );
sb.append( ",\"age\":" )
.append( age );
sb.append( "}}" );
return sb.toString();
}
}
2.在配置文件中存入配置信息
server:
port: 8081
cat:
name: Tom
age: 5
@Value获取值和@ConfigurationProperties获取值比较
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入文件中的属性 | 一个一个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value; | ||
如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties; |
网友评论