@Value
@ConfigurationProperties与@Value
.yml文件——.properties文件(两种配置文件中引入属性值得方式有所不同)
.yml格式不支持使用注解@PropertySource导入配置
读取属性值:—支持另种方式读取
@@@方式一:SpEL表达式方式读取配置项:@Value("#{configProoerties['key']}")
例:
@Value("#{configProoerties['user.name']}")
String name;
@@@方式二:占位符方式:@Value("${key}")---常用方式
设置默认属性值:
默认情况下,缺少配置项会导致。当配置文件application中缺少相关属性值时,可以在属性键后面添加冒号(:)和默认值来。代码如下:
@Value("${key:helloworld}")
String key;
(如果配置文件中没有配置该属性的值,则系统此时不会报异常,而是会使用注解中指定的默认值)
一、.yml文件
配置中:
my:
id: 100
name: zhangsan
使用方式:——普通值
直接在需要引入的属性值上添加对应的注解即可引入:
例:
@Value("${my.name}")
String name;
注意:如果配置中没有相关属性配置,则会启动异常;
——数组、集合、map等--(待定TODO)
二、.properties文件(需要引入配置文件位置才行)
配置中:
aa.age=10000
aa.name=zhangsan
或者:
age=10000
name=zhangsan
使用方式1:——普通值
只添加注解:(只使用该注解情况下)@PropertySource("classpath:abc.properties")指定配置文件位置
@Value("${aa.name}")
String name;
@Value("${aa.age}")
String age;
或者:
@Value("${name}")
String name;
@Value("${age}")
String age;
使用方式2:
只添加注解:@PropertySource(“classpath:abc.properties”)
添加额外注解:@ConfigurationProperties(prefix = “aa”)指定前缀aa(前提是需要使用到的属性有前缀)
如果使用以上注解,则:
1、属性的名称要与配置文件中的字段名称相同(不同报异常),
2、使用中的属性不需要添加 @Value("**")注解
3、必须需要创建相关属性字段的set()方法才能自动赋值成功
//——数组、集合、map等--(待定TODO)
四、配置文件属性注入静态变量(属性)中————(静态变量只能使用set方式类注入值)
#### 【【【【【【【【注意】】】】】】】】】】
=====【如果是注入静态属性注意:】
=====【idea快捷键生成的 set() 方法会自带static状态修饰符;】
=====【需要手动将其去掉,否则会造成注入失败!】
=====【set()方法中使用 类名.xx 方式 或者 this.xx方式都可;】
#### 【【【【【【【【注意】】】】】】】】】】
注意:如果直接使用以上类似方式注入静态变量,是不行的,都是null;
需要通过set()方式来进行注入
方式一:
配置内容:
(没有前缀情况下)
age=10000
name=zhangsan
或:
(有前缀情况下)
aa.age=10000
aa.name=zhangsan
使用中:(此种方式有无前缀都通用)
1、属性:
static String name;
static String age;
2、只添加注解:@PropertySource("classpath:abc.properties")
@Value("${name}")
public void setName(String name) {
Person.name = name;
}
@Value("${age}")
public void setAge(String age) {
Person.age = age;
}
或:
@Value("${aa.name}")
public void setName(String name) {
Person.name = name;
}
@Value("${aa.age}")
public void setAge(String age) {
Person.age = age;
}
方式二:(此种方式需要配置文件中的属性名必须有前缀才行)(我的理解和测试暂时是这样)
配置内容(必须有前缀情况下):
aa.age=10000
aa.name=zhangsan
使用中:(此种方式只对有前缀可行)
1、需添加注解:@PropertySource("classpath:abc.properties")
添加额外注解:@ConfigurationProperties(prefix = "aa")指定前缀aa
2、属性:
static String name;
static String age;
@Value("${name}")
public void setName(String name) {
Person.name = name;
}
@Value("${age}")
public void setAge(String age) {
Person.age = age;
}
或:
@Value("${aa.name}")
public void setName(String name) {
Person.name = name;
}
@Value("${aa.age}")
public void setAge(String age) {
Person.age = age;
}
【使用this样式】
@Value("${aa.name}")
public void setName(String name) {
this.name = name;
}
@Value("${aa.age}")
public void setAge(String age) {
this.age = age;
}
=================================================
五、对于.properties文件 ,还可以通过Java代码的形式获取配置文件中属性信息:
配置文件:
aa.age=10000
name=zhangsan
使用中:
ClassPathResource classPathResource = new ClassPathResource("properties/sas.properties");
InputStream inputStream = classPathResource.getInputStream();
//创建配置类对象
Properties properties=new Properties();
properties.load(inputStream);
//这里还可以加载reader类型数据
//获取属性值
String age = properties.getProperty("aa.age");
String name = properties.getProperty("name");
六、自定义属性值的使用(.properties)
-
基本属性类型:字符串、整数、布尔值
app.numbers=35 app.regiest=true
-
多行字符串:
如果属性值很长,则可以将其用反斜杠“\”字段分开,分成几行以提高代码可读性 app.message=你好\ 你是谁\ 你好吗?
-
数组、列表、集合:
集合值需要用逗号“,”隔开。在调用时,只需将属性注入数组即可。 app.numbers=1,2,3,4 @Value("${app.numbers}") int[ ] numbers;
集合和列表完全相同。如果属性的值包含重复项,则只会将一个元素添加到集合中 app.numbers=1,2,3,4 @Value("${app.numbers}") List<Integer> numbers;
-
列表属性自定义分割符:
默认情况下,Spring使用逗号分割属性值。如果要使用分号这样的分隔符,则可以如下使用方式: app.numbers=1;2;3;4;5 调用时使用分隔符即可: @Value("#{'${app.numbers}'.split(';')") List<Integer> numbers;
-
属性为HashMap:
对于HashMap,可以在配置文件中设置格式 app.numbers-map={key1:1,key2:2,key3:3} 然后调用方法 @Value("#{${app.numbers-map}}") Map<String,Integer> numberMap;
七、自定义属性值的使用(.yml)
-
简介:
YAML语言是一种通用的数据串行化格式。
-
YAML支持的数据类型
-
对象:键值对的集合,又被称为映射(Mapping)、哈希(Hashes)、字典(Dictionary)
对象的一组键值对用冒号结构表示。
name:tom
-
数组:一组按次序排列的值,又被称为序列(Sequence)、列表(List)
一组连词线开头的行构成一个数组 -A -B -C 上面的代码转换后为 ['A','B','C'] - -A -B -C 以上代码转换后为 [['A','B','C']] 也可以使用行内表示法(待确定明天整 TODO) car:[bmw,audi] 上面代码转换后:{car:['bmw','audi']}
-
复合结构
对象和数组可以结合使用,形成复合结构:
animal: -Cat -Pig car: BMW:520LI AUDI:A7 转换后为:{animal:['Cat','Pig'],car:{BMW:'520LI',AUDI:'A7'}}
-
纯量
纯量是最基本的、不可再分的值,支持字符串、布尔值、整数、浮点数、Null、时间、日期。
number:37 isSet:true parent:~ iso8601:2021-05-30 str:你好啊
-