北京南站到北京站,wordpress返回上一个页面,阿里巴巴官网下载手机版,dede网站搬家更换空间重新安装从配置文件中获取属性应该是SpringBoot开发中最为常用的功能之一#xff0c;简单回顾一下这六种的使用方式#xff1a;
说明Environment对象Environment是springboot核心的环境配置接口#xff0c;它提供了简单的方法来访问应用程序属性#xff0c;包括系统属性、操作系统…从配置文件中获取属性应该是SpringBoot开发中最为常用的功能之一简单回顾一下这六种的使用方式
说明Environment对象Environment是springboot核心的环境配置接口它提供了简单的方法来访问应用程序属性包括系统属性、操作系统环境变量、命令行参数、和应用程序配置文件中定义的属性等等使用Environment方式来获取配置属性值非常简单只要注入Environment类调用其方法 getProperty(属性key) 即可。ValueValue注解是Spring框架提供的用于注入配置属性值的注解它可用于类的成员变量、方法参数和构造函数参数上 在应用程序启动时使用Value注解的Bean会被实例化。所有使用了Value注解的Bean会被加入到PropertySourcesPlaceholderConfigurer的后置处理器集合中。当后置处理器开始执行时它会读取Bean中所有Value注解所标注的值并通过反射将解析后的属性值赋值给标有Value注解的成员变量、方法参数和构造函数参数。重要 ⚠️注意 ①在使用Value注解时需要确保注入的属性值已经加载到Spring容器中否则会导致注入失败 ②建议引用变量的时候给定一个默认值避免启动报“缺失配置”的错误 ③通过依赖注入的方式获取对象中属性值切记不要使用new的方式来创建对象获取其属性。ConfigurationPropertiesSpringBoot提供的一种更加便捷来处理配置文件中的属性值的方式可以通过自动绑定和类型转换等机制将指定前缀的属性集合自动绑定到一个Bean对象上。PropertySourcesPropertySources注解的实现原理相对简单应用程序启动时扫描所有被该注解标注的类获取到注解中指定自定义配置文件的路径将指定路径下的配置文件内容加载到Environment中这样可以通过Value注解或 Environment.getProperty()方法来获取其中定义的属性值了。默认只限读取properties文件内容想加载yaml文件内容可以自定义factory适配器指定factory具体的使用。YamlPropertiesFactoryBean对象只限读取yaml文件通过Value注解或Environment.getProperty()方法来配合着获取其中定义的属性值。JAVA原生通过java.util.Properties去加载配置文件中的属性。
一、Environment
注入Environment类调用其方法getProperty(属性key)即可。
Slf4j
SpringBootTest
public class EnvironmentTest {Resourceprivate Environment env;Testpublic void var1Test() {String var1 env.getProperty(env.var1);log.info(Environment获取的配置内容{}, var1);}
}二、Value注解
只要在变量上加注解Value(${env.var1})就可以了Value注解会自动将配置文件中的env.var1属性值注入到var1字段中。
Slf4j
SpringBootTest
public class EnvVariablesTest {Value(${env.var1})private String var1;Testpublic void var1Test(){log.info(配置文件属性: {},var1);}
}三、ConfigurationProperties注解
在application.yml配置文件中添加配置项
env:var1: 变量值1var2: 变量值2创建一个MyConf类用于承载所有前缀为env的配置属性。
Data
Configuration
ConfigurationProperties(prefix env)
public class MyConf {private String var1;private String var2;
}在需要使用var1、var2属性值的地方将MyConf对象注入到依赖对象中即可。
Slf4j
SpringBootTest
public class ConfTest {Resourceprivate MyConf myConf;Testpublic void myConfTest() {log.info(ConfigurationProperties注解获取的配置内容{}, JSON.toJSONString(myConf));}
}四、PropertySources注解
在src/main/resources/目录下创建自定义配置文件important.properties增加两个属性。
env.var1变量值1
env.var2变量值2在需要使用自定义配置文件的类上添加PropertySources注解注解value属性中指定自定义配置文件的路径可以指定多个路径用逗号隔开。
Data
Configuration
PropertySources({PropertySource(value classpath:important.properties, encoding utf-8),PropertySource(value classpath:important.properties,encoding utf-8)
})
public class PropertySourcesConf {Value(${env.var1})private String var1;Value(${env.var2})private String var2;
}五、YamlPropertiesFactoryBean加载YAML文件
Configuration
public class MyYamlConfig {Beanpublic static PropertySourcesPlaceholderConfigurer yamlConfigurer() {PropertySourcesPlaceholderConfigurer configurer new PropertySourcesPlaceholderConfigurer();YamlPropertiesFactoryBean yaml new YamlPropertiesFactoryBean();yaml.setResources(new ClassPathResource(test.yml));configurer.setProperties(Objects.requireNonNull(yaml.getObject()));return configurer;}
}可以通过Value注解或Environment.getProperty()方法来获取其中定义的属性值。
Slf4j
SpringBootTest
public class YamlTest {Value(${env.var3})private String var3;Testpublic void myYamlTest() {log.info(Yaml获取配置内容{}, var3);}
}六、JAVA原生读取
Slf4j
SpringBootTest
public class CustomTest {Testpublic void customTest() {Properties props new Properties();try {InputStreamReader inputStreamReader new InputStreamReader(this.getClass().getClassLoader().getResourceAsStream(test.properties),StandardCharsets.UTF_8);props.load(inputStreamReader);} catch (IOException e1) {System.out.println(e1);}log.info(Properties Name props.getProperty(env.appName));}
}