java从配置文件中读取参数的方式
有的时候我们需要将一些固定的配置信息写到yml文件中去,然后在类中在读取,那么具体的有那些可以获取到yml配置文件中配置项的方法呢
配置参数
先写配置参数
#首先就得先在yml文件中配置参数
upload:
param:"test"
一、@Value(“${}”)
基本内容:
在使用这个注解的时候,可能还需要使用 @PropertySource() 来指定配置文件的位置。他还有一个value属性,是字符串数组类型的,可以用来指定多个配置文件的路径。
第一中就是使用 @value(“{参数名}”)的方式,以上面得配置参数为例子,在具体的类中,可以定义一个类中的私有变量,然后通过注解@Value(“${upload.param}”)的方式将配置参数值注入到这个参数中:
@PropertySource({"配置文件路径1", "配置文件路径2"})
public class getParam{
@Value("${upload.param:默认值}") // 如果值不存在可以指定默认值
private String test;
}
拓展一下关于@Value()的知识。
@value()可以使用 ${} 和 #{} 两中方式进行参数注入;
${}: 注入的是配置文件中的属性
#{}: 使用的是 SpEI表达式 通常用来获取bean属性。
非配置文件的注入类型:
1、普通字符串 @Value("tesst")
2、操作系统属性
获取系统环境变量 @Value("${环境变量名}")
@Value("${path}") @value("${classpath}") @Value("${java_home}")
3、表达式结果 @Value("#{100+200}")
4、其他bean属性
5、注入url资源
剖析
一般我们的@Value的数据的来源主要是从配置文件中。那么@Value数据来源于spring的什么地方呢?
其实在spring的框架中存在一个叫
javaorg.springframework.core.env.PropertySource
的类,他就是我们spring的配置源,其中以键值对的方式存储这我们的配置信息。
并且还有一个叫 Environment 的接口,其中在处理的过程中。
Environment 中的 resolvePlaceholders 解析方法用来解析我们在注解中 的参数 ${param} ,然后在propertySourceList 属性源列表中遍历拿到对应的propertySource对象,最后使用getPropertySources 方法来获取我们对应的属性。
修改数据源:
如果我们想改变@Value数据的来源,首先就要将配置信息包装为PropertySource对象
动态刷新:
要实现 @value的动态刷新可以使用spring的 @RefreshScope注解来实现这个
二、ConfigurationProperties
param:
user:
name: "zs"
age: 23
// ConfigurationPropertes 可以检验数据 @Validatad
// prefix是配置文件中的浅醉
// name 绑定注入的参数ben的名字,
// havingValue 对比注入的和类的参数,相符合就返回true,配置类才会生效
@Component
@ConfigurationPropertes(prefix="param", name="user", havingValue="true")
@Validatad
public class test{
private String name;
private String age;
}
不断学习
虽然有点慢