1. Введение
существуетSpring BootВ проекте нам часто нужно читатьapplication.yml
Пользовательская конфигурация файла конфигурации, сегодня мы перечислимyaml
Некоторые распространенные средства и методы чтения конфигурационных файлов.
2. Используйте аннотацию @Value
Во-первых, подумайте об использовании@Value
Аннотация, аннотация может быть проанализирована толькоyaml
Простые типы в файлах и привязанные к свойствам объекта.
felord:
phone: 182******32
def:
name: 码农小胖哥
blog: felord.cn
we-chat: MSW_623
dev:
name: 码农小胖哥
blog: felord.cn
we-chat: MSW_623
type: JUEJIN
для вышеперечисленногоyaml
конфигурации, если мы используем@Value
В случае аннотаций сразу после двоеточия стоит значениеkey
Чтобы правильно ввести соответствующее значение. Напримерfelord.phone
мы можем пройти@Value
получить, ноfelord.def
нет потому чтоfelord.def
За ним нет прямого значения, у него также есть опции следующего уровня. Кроме того@Value
не поддерживаетсяyaml
слабо связанный синтаксис, т.felord.def.weChat
не могу понятьfelord.def.we-chat
значение .
@Value
с помощьюSpringизSpEL
выражение для получения соответствующего значения:
// 获取 yaml 中 felord.phone的值 并提供默认值 UNKNOWN
@Value("${felord.phone:UNKNOWN}")
private String phone;
@Value
Сценарий использования заключается в том, что когда нам нужно только получить определенное значение в файле конфигурации, если нам нужно связать и внедрить ряд значений, рекомендуется использовать сложный объект для инъекции.
3. Аннотируйте с помощью @ConfigurationProperties
@ConfigurationProperties
Аннотации дают нам возможность внедрять несколько параметров конфигурации в сложные объекты. Это требует от нас указать общий префикс для конфигурации. Например, мы хотим связатьfelord.def
Все элементы конфигурации в разделе:
package cn.felord.yaml.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import static cn.felord.yaml.properties.FelordDefProperties.PREFIX;
/**
* @author felord.cn
*/
@Data
@ConfigurationProperties(PREFIX)
public class FelordDefProperties {
static final String PREFIX = "felord.def";
private String name;
private String blog;
private String weChat;
}
Мы замечаем, что можем использовать
we-chat
значение, так как эта форма поддерживает верблюжий регистр отcamel-case
к именам, разделенным тиреkebab-case
автоматическое преобразование.
если мы используем@ConfigurationProperties
Если это так, рекомендуется настроить имя класса с суффиксомProperties
,НапримерRedisСуффиксRedisProperties
,RabbitMQзаRabbitProperties
.
Кроме того, если мы хотим вложиться, мы можем воспользоваться помощью@NestedConfigurationProperty
Реализация аннотации. Вы также можете использовать внутренние классы. Здесь начнется реализация внутреннего классаyaml
Внедрить все свойства в:
package cn.felord.yaml.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import static cn.felord.yaml.properties.FelordProperties.PREFIX;
/**
* 内部类和枚举配置.
*
* @author felord.cn
*/
@Data
@ConfigurationProperties(PREFIX)
public class FelordProperties {
static final String PREFIX = "felord";
private Def def;
private Dev dev;
private Type type;
@Data
public static class Def {
private String name;
private String blog;
private String weChat;
}
@Data
public static class Dev {
private String name;
private String blog;
private String weChat;
}
public enum Type {
JUEJIN,
SF,
OSC,
CSDN
}
}
Использовать отдельно@ConfigurationProperties
Если вы по-прежнему не можете напрямую использовать объект конфигурацииFelordDefProperties
, потому что он не зарегистрирован какSpring Bean. Мы можем заставить его работать двумя способами.
3.1 Явное внедрение Spring IoC
ты можешь использовать@Component
,@Configuration
и т.д. Аннотации будутFelordDefProperties
инъекцияSpring IoCсделать его эффективным.
package cn.felord.yaml.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import static cn.felord.yaml.properties.FelordDefProperties.PREFIX;
/**
* 显式注入Spring IoC
* @author felord.cn
*/
@Data
@Component
@ConfigurationProperties(PREFIX)
public class FelordDefProperties {
static final String PREFIX = "felord.def";
private String name;
private String blog;
private String weChat;
}
3.2 Регистрация с помощью @EnableConfigurationProperties
Мы также можем использовать аннотации@EnableConfigurationProperties
Зарегистрируйтесь, чтобы вам не нужно было явно объявлять класс конфигурации какSpring Bean.
package cn.felord.yaml.configuration;
import cn.felord.yaml.properties.FelordDevProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* 使用 {@link EnableConfigurationProperties} 注册 {@link FelordDevProperties}使之生效
* @author felord.cn
*/
@EnableConfigurationProperties({FelordDevProperties.class})
@Configuration
public class FelordConfiguration {
}
Эта аннотация требует явной регистрации соответствующего класса конфигурации.
3.3 Сканирование с помощью @ConfigurationPropertiesScan
существуетSpring Boot 2.2.0.RELEASEАннотация к скану представлена в@ConfigurationPropertiesScan
. Он может сканировать все@ConfigurationProperties
отмеченные классы конфигурации и сделать ихIoCинъекция.
package cn.felord.yaml;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
/**
* {@link ConfigurationPropertiesScan} 同 {@link EnableConfigurationProperties} 二选一
*
* @see cn.felord.yaml.configuration.FelordConfiguration
* @author felord.cn
*/
@ConfigurationPropertiesScan
@SpringBootApplication
public class SpringBootYamlApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootYamlApplication.class, args);
}
}
Это очень удобно для автоматического внедрения и пакетного внедрения классов конфигурации, но существуют ограничения версии, которые должны быть в2.2.0и выше.
3.4 Environment
Spring Bootпроекты также могут бытьorg.springframework.core.env.Environment
который предоставилgetProperty(String key)
для получения, как правило, не очень часто используется.
4. Резюме
Рекомендуется использовать один атрибут в ежедневной разработке@Value
, рекомендуется, если в одной группе несколько свойств@ConfigurationProperties
. Необходимо добавить, что@ConfigurationProperties
Также поддерживается проверка атрибутов с использованием JSR303. Уделять больше внимания:Код Фермер Маленький Толстый БратПолучите больше технических галантерейных товаров. СвязанныйdemoОтвет через официальный аккаунтyaml
Получать.
关注公众号:Felordcn获取更多资讯