Эта статья участвовала в учебном плане выходного дня, щелкните ссылку, чтобы просмотреть подробности:план учебы на выходные
Со временем капли воды и камни изнашиваются 😄
предисловие
существуетSpringBoot
Во-первых, нам часто нужно прочитать значение файла конфигурации, так как же можно прочитать значение файла конфигурации? Давайте посмотрим вместе с автором!
1. Используйте аннотацию @Value
Сначала подготовьте два файла конфигурации с именами:application.properties
а такжеapplication.yml
- properties
userproperties.name=gongj===properties
userproperties.age=11===properties
userproperties.sex=12===properties
userproperties.email=3333@163.com===properties
- yml
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);
}
Во-вторых, используйте аннотацию @ConfigurationProperties.
- properties
@Component
@ConfigurationProperties(prefix = "userproperties")
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;
}
}
prefix
: указывает префикс для имен ключей в файле конфигурации.
Уведомление:ReadPropertiesValue
класс, если не используется@Component
ретушь. нельзя получить в контейнере. необходимо добавить в класс запуска@EnableConfigurationProperties(ReadPropertiesValue.class)
Зарегистрируйте его в контейнере.
- yml
@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;
}
}
- контрольная работа
@Autowired
ReadPropertiesValue readPropertiesValue;
@Autowired
ReadYmlValue readYmlValue;
@Test
public void readPropertiesValueTest(){
System.out.println(readPropertiesValue.toString());
System.out.println(readYmlValue.toString());
}
3. Используйте среду
Примечание. Этот способ представляет собой прямое внедрение зависимостей.Evnironment
объект, затем используйтеenvironment.getProperty("键名")
Соответствующее значение может быть прочитано.
- тест кодирования
@Autowired
Environment environment;
@Test
public 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"));
}
Вышеупомянутые методы предназначены для чтения файла конфигурации по умолчанию.application.properties
а такжеapplication.yml
. Но точно не возможно иметь только эти два документа в официальной разработке компании. Как правило, это будет настраиваемый файл конфигурации.В настоящее время необходимо указать загрузочный файл конфигурации.
Чтение пользовательского файла конфигурации
СоздайтеconfigValue.properties
а такжеconfigValue.yml
конфигурационный файл
- configValue.properties
userconfigvalueproperties.name=yuanjConfigValue
userconfigvalueproperties.age=11ConfigValue
userconfigvalueproperties.sex=12ConfigValue
userconfigvalueproperties.email=3333@163.comConfigValue
- yml
userconfigvalueyml:
name: yuanjconfigvalueyml
age: 11configvalueyml
sex: 12configvalueyml
email: 3333@163.comconfigvalueyml
1. Используйте @PropertySource + @Value
- читать
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 + '\'' +
'}';
}
}
@PropertySource
Атрибут настраивается в аннотации,value
: указывает расположение файла конфигурации.
- прочитать содержимое файла yml
@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 + '\'' +
'}';
}
}
@Autowired
ReadPropertiesByValue readPropertiesByValue;
@Autowired
ReadYmlByValue readYmlByValue;
@Test
public void readPropertiesByValue(){
System.out.println(readPropertiesByValue.toString());
System.out.println(readYmlByValue.toString());
}
2. Используйте @PropertySource + @ConfigurationProperties
- properties
@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;
}
}
- yml
@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
read, поэтому нам нужно преобразовать его.
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 {
@Override
public 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<org.springframework.core.env.PropertySource<?>> 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)
- контрольная работа
//===========指定配置文件加载
@Autowired
ReadPropertiesConfigValue readPropertiesConfigValue;
@Autowired
ReadYmlConfigValue readYmlConfigValue;
@Test
public void readPropertiesConfigValueTest(){
System.out.println(readPropertiesConfigValue.toString());
System.out.println(readYmlConfigValue.toString());
}
- Если у вас есть какие-либо вопросы по этой статье или есть ошибки в этой статье, пожалуйста, оставьте комментарий. Если вы считаете, что эта статья была вам полезна, ставьте лайк и подписывайтесь на нее.