标签:spirng boot @ConfigurationPrope @Value
在spring boot的使用中,通过@ConfigurationProperties 和 @Value 两个注解可以给类赋值,但是两个的使用方式还是有些不同的,以下是官方说明以及自己在使用中的简介。
1.根据他们的比较你可以简单的理解 :
1 松绑定:
@ConfigurationProperties使用中不必每个字都和配置中的key一致;@Value必须要一致 【可以理解成@ConfigurationProperties能够批量注入配置文件的属性,@Value只能一个个指定】
2 数据源支持 :
@ConfigurationProperties 还支持spring元数据,可以在resource下建立META-INF文件夹,然后建立文件additional-spring-configuration-metadata.json。里面的数据格式必须满足spring的元数据格式http://docs.spring.io/spring-boot/docs/1.5.3.RELEASE/reference/htmlsingle/#configuration-metadata
3 Spring表达式语言(SpEL):
@Value支持SqEL,简单理解必须单个参数赋值,即强绑定。
2.实操说明
a.yml配置文件
#自定义 - 数据源配置
myconfig.dbconfig:
needUpdateScheme: true
dataUpdateType: prod #数据初始化类型 prod:只更新prod类型的init数据,test:更新所有类型的数据
databases:
db0:
url: jdbc:mysql://172.168.0.31:3306/xxx?useSSL=false&useUnicode=true&characterEncoding=utf-8
username: xxxx
password: xxxx
b RepositoryProperties类为配置文件的对象类,DatabaseProperty为databases的对象类
@ConfigurationProperties(prefix = "myconfig.dbconfig")
public class RepositoryProperties {
//是否需要更新数据库结构
private String needUpdateScheme = "false";
//数据源
private Map<String, DatabaseProperty> databases = new HashMap<>();
//数据初始化类型 prod:只更新prod类型的init数据,test:更新所有类型的数据
private String dataUpdateType = "prod";
public String getDataUpdateType() {
return dataUpdateType;
}
public Map<String, DatabaseProperty> getDatabases() {
return databases;
}
public String getNeedUpdateScheme() {
return needUpdateScheme;
}
public void setNeedUpdateScheme(String needUpdateScheme) {
this.needUpdateScheme = needUpdateScheme;
}
public void setDatabases(Map<String, DatabaseProperty> databases) {
this.databases = databases;
}
public void setDataUpdateType(String dataUpdateType) {
this.dataUpdateType = dataUpdateType;
}
}
public class DatabaseProperty {
//连接串
@NotNull // ---
private String url;
//数据库帐号
private String username;
//密码
private String password;
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 class RepositoryProperties {
//是否需要更新数据库结构
@Value("${myconfig.dbconfig.needUpdateScheme}")
private String needUpdateScheme = "false";
......
@ConfigurationProperties(prefix = "myconfig.dbconfig")
public class RepositoryProperties {
@NotNull //JSR303进行配置文件值及校验
private String needUpdateScheme = "false";
....
}
spring boot @ConfigurationProperties vs @Value
标签:spirng boot @ConfigurationPrope @Value
原文地址:http://blog.51cto.com/12066352/2095674