本文共 7911 字,大约阅读时间需要 26 分钟。
@[TOC](目录)
先准备一下两个配置文件,名称为:application.properties
和application.yml
userproperties.name=ss===propertiesuserproperties.age=11===propertiesuserproperties.sex=12===propertiesuserproperties.email=3333@163.com=====properties
useryml: name: gongjie age: 23 sex: 1 email: 111@163.com
@Value("${userproperties.name}") private String name; @Value("${userproperties.age}") private String age; @Value("${userproperties.sex}") private String sex; @Value("${userproperties.email}") private String email; @Value("${useryml.name}") private String nameyml; @Value("${useryml.age}") private String ageyml; @Value("${useryml.sex}") private String sexyml; @Value("${useryml.email}") private String emailyml; @Test public void testValue(){ System.out.println("name=" + name + ",age=" + age + ",sex=" + sex + ",email" + email); System.out.println("nameyml=" + nameyml + ",ageyml=" + ageyml + ",sexyml=" + sexyml + ",emailyml" + emailyml); }
@Component//如果不用@Component修饰。则在容器无法获取。需要在启动类上加@EnableConfigurationProperties(ReadPropertiesValue.class)将其注册到容器中。@ConfigurationProperties(prefix = "userproperties")//prefix:指定配置文件中键名称的前缀。public class ReadPropertiesValue { private String name; private String age; private String email; private String sex; @Override public String toString() { return "ReadPropertiesValue{" + "name='" + name + '\'' + ", age=" + age + ", email='" + email + '\'' + ", sex=" + sex + '}'; } public void setName(String name) { this.name = name; } public void setAge(String age) { this.age = age; } public void setEmail(String email) { this.email = email; } public void setSex(String sex) { this.sex = sex; }}
@Component@ConfigurationProperties(prefix = "useryml")public class ReadYmlValue { private String name; private String age; private String email; private String sex; @Override public String toString() { return "ReadYmlValue{" + "name='" + name + '\'' + ", age=" + age + ", email='" + email + '\'' + ", sex=" + sex + '}'; } public void setName(String name) { this.name = name; } public void setAge(String age) { this.age = age; } public void setEmail(String email) { this.email = email; } public void setSex(String sex) { this.sex = sex; }}
# 三、使用Environment
注意:这种方式是直接依赖注入Evnironment
对象,然后使用environment.getProperty("键名")
即可读取对应的值。
@AutowiredEnvironment environment;@Testpublic void environmentTest(){ System.out.println(environment.getProperty("userproperties.name") + "==" + environment.getProperty("userproperties.age") + "==" + environment.getProperty("userproperties.sex") + "==" + environment.getProperty("userproperties.email")); System.out.println(environment.getProperty("useryml.name") + "==" + environment.getProperty("useryml.age") + "==" + environment.getProperty("useryml.sex") + "==" + environment.getProperty("useryml.email"));}
创建configValue.properties
与configValue.yml
配置文件
userconfigvalueproperties.name=yuanjConfigValueuserconfigvalueproperties.age=11ConfigValueuserconfigvalueproperties.sex=12ConfigValueuserconfigvalueproperties.email=3333@163.comConfigValue
userconfigvalueyml: name: yuanjconfigvalueyml age: 11configvalueyml sex: 12configvalueyml email: 3333@163.comconfigvalueyml
properties
文件内容@Component@PropertySource(value = "classpath:configValue.properties")public class ReadPropertiesByValue { @Value("${userconfigvalueproperties.name}") public String name; @Value("${userconfigvalueproperties.age}") public String age; @Value("${userconfigvalueproperties.sex}") public String sex; @Value("${userconfigvalueproperties.email}") public String email; @Override public String toString() { return "ReadPropertiesByValue{" + "name='" + name + '\'' + ", age='" + age + '\'' + ", sex='" + sex + '\'' + ", email='" + email + '\'' + '}'; }}
@Component@PropertySource(value = "classpath:configValue.yml")public class ReadYmlByValue { @Value("${userconfigvalueyml.name}") public String name; @Value("${userconfigvalueyml.age}") public String age; @Value("${userconfigvalueyml.sex}") public String sex; @Value("${userconfigvalueyml.email}") public String email; @Override public String toString() { return "ReadYmlByValue{" + "name='" + name + '\'' + ", age='" + age + '\'' + ", sex='" + sex + '\'' + ", email='" + email + '\'' + '}'; }}
二、使用@PropertySource + @ConfigurationPropertiesproperties
@Component@ConfigurationProperties(prefix = "userconfigvalueproperties")@PropertySource(value = { "classpath:configValue.properties" })public class ReadPropertiesConfigValue { private String name; private String age; private String email; private String sex; @Override public String toString() { return "ReadPropertiesConfigValue{" + "name='" + name + '\'' + ", age='" + age + '\'' + ", email='" + email + '\'' + ", sex='" + sex + '\'' + '}'; } public void setName(String name) { this.name = name; } public void setAge(String age) { this.age = age; } public void setEmail(String email) { this.email = email; } public void setSex(String sex) { this.sex = sex; }}
@Component@ConfigurationProperties(prefix = "userconfigvalueyml")@PropertySource(value = { "classpath:configValue.yml" }, factory = CommPropertyResourceFactory.class)public class ReadYmlConfigValue { private String name; private String age; private String email; private String sex; @Override public String toString() { return "ReadYmlConfigValue{" + "name='" + name + '\'' + ", age='" + age + '\'' + ", email='" + email + '\'' + ", sex='" + sex + '\'' + '}'; } public void setName(String name) { this.name = name; } public void setAge(String age) { this.age = age; } public void setEmail(String email) { this.email = email; } public void setSex(String sex) { this.sex = sex; }}
由于@PropertySource
是不支持yaml
读取的,所以我们需要改造一下。
import org.springframework.boot.env.YamlPropertySourceLoader;import org.springframework.core.env.PropertySource;import org.springframework.core.io.support.DefaultPropertySourceFactory;import org.springframework.core.io.support.EncodedResource;import org.springframework.core.io.support.PropertySourceFactory;import org.springframework.lang.Nullable;import java.io.IOException;import java.util.List;import java.util.Optional;public class CommPropertyResourceFactory implements PropertySourceFactory {@Overridepublic PropertySource createPropertySource(@Nullable String name, EncodedResource resource) throws IOException { String resourceName = Optional.ofNullable(name).orElse(resource.getResource().getFilename()); if (resourceName.endsWith(".yml") || resourceName.endsWith(".yaml")) { List> yamlSources = new YamlPropertySourceLoader().load(resourceName, resource.getResource()); return yamlSources.get(0); } else { return new DefaultPropertySourceFactory() .createPropertySource(name, resource); }}}
在需要读取yaml
的时候,要增加factory
参数
@PropertySource(value = { "classpath:configValue.yml" }, factory = CommPropertyResourceFactory.class)
转载地址:http://yexzb.baihongyu.com/