Основы SpringBoot2.x: гибкое использование внешней информации о конфигурации

Spring Boot

Знания меняют судьбу, программирование делает меня счастливым, и я продолжу шагать в мире открытого исходного кода в 2020 году.
Ставьте лайк и смотрите снова, формируйте привычку
дай мне звезду,Нажмите, чтобы узнать о решении для посадки службы компонентного интерфейса на основе SpringBoot.

SpringBootобеспечивает внутреннюю конфигурациюapplication.ymlфайл для глобальной конфигурации, а также поддерживает использованиеprofilesЧтобы активировать использование разных файлов конфигурации в разных средах, и этот метод был упакован в конце концов, поэтому существуют определенные ограничения, такие как специальная конфиденциальная конфигурация базы данных, также может иметь риск утечки, как решить эту проблему? Давайте посмотрим на способы внешней настройки, о которых мы поговорим в этой главе! ! !

Рекомендуемое чтение

предисловие

SpringBootПредоставляет множество методов внешней настройки, в основном для облегчения запуска одного и того же кода в разных средах.

мы можем пройтиProperties文件,YAML文件,环境变量,命令行参数и т. д. для настройки, при получении значения конфигурации вы можете передать@ValueАннотация для инъекций, вы также можете использовать@ConfigurationPropertiesАннотация сделанаИерархическая структураПривязать к полю класса сущности.

порядок загрузки

SpringBootСуществует определенный порядок параметров конфигурации, разумеется, конфигурация атрибутов с одинаковыми именами будет существовать из-за приоритета загрузки.покрытие, в следующем порядке:

  1. DevToolsУстановить свойства глобально
  2. @TestPropertySourceаннотация
  3. propertiesтестируемые свойства
  4. аргументы командной строки
  5. SPRING_APPLICATION_JSONКонфигурация свойств (встроенные строки JSON, встроенные в переменные среды или системные свойства)
  6. ServletConfigПараметры инициализации
  7. ServletContextПараметры инициализации
  8. JNDIАтрибутыjava:comp/env
  9. Свойства системы Java
  10. переменные среды операционной системы
  11. Файлы конфигурации упакованы внутри jar (application.propertiesа такжеYAMLдокумент)
  12. @PropertySourceаннотация
  13. Свойства по умолчанию (черезSpringApplication.setDefaultPropertiesнастраивать)

Пример конфигурации

Мы выбираем несколько из вышеперечисленных, чтобы настроить вывод для тестирования, сначала создайте файл с именемLoadConfigКласс конфигурации выглядит следующим образом:

/**
 * 加载配置类
 *
 * @author 恒宇少年
 */
@Configuration
public class LoadConfig {
    /**
     * 配置读取name属性,不存在时使用空字符为默认值
     */
    @Value("${name:''}")
    private String name;

    public String getName() {
        return name;
    }
}

существуетLoadConfigВ классе конфигурации мы добавляемnameполе, так как это поле использует@Valueаннотации, поэтому ее значение будет загружено из среды конфигурации с именемnameзначение свойства (нет ограничений на то, как его можно настроить).

Чтобы облегчить демонстрацию, мы запускаем приложение, реализуяCommandLineRunnerВыводы интерфейса после успешного запускаnameзначение ,SpringBootApplicationКод начального класса выглядит следующим образом:

/**
 * 启动类入口
 */
@SpringBootApplication
public class SpringBootBasicExternalizedConfigurationApplication implements CommandLineRunner {
    /**
     * 注入配置类{@link LoadConfig}
     */
    @Autowired
    private LoadConfig loadConfig;

    public static void main(String[] args) {
        SpringApplication.run(SpringBootBasicExternalizedConfigurationApplication.class, args);
    }


    @Override
    public void run(String... args) throws Exception {
        System.out.println("name config value:" + loadConfig.getName());
    }
}

Конфигурация YAML-файла

Это самый распространенный способ разработки приложений, просто нужноsrc/main/resourcesСоздайте каталог с именемapplication.yml, а затем добавьте конфигурацию, соответствующую имени атрибута в файле, следующим образом:

# 配置name属性
name:
  default

Если мы запустим приложение напрямую, оно выведет в консольnameценностьdefault.

Меры предосторожности:application.ymlа такжеapplication.propertiesФункции и приоритеты те же, но форма отображения конфигурации другая Лично я предпочитаюYAMLФорма документа явно иерархическая, читабельность выше.

Конфигурация переменной среды командной строки

в исполненииjava -jarПри запуске приложения вы можете добавитьSPRING_APPLICATION_JSONконфигурация для пользовательской конфигурации атрибута, котораяJSONВ виде строки использование выглядит следующим образом:

SPRING_APPLICATION_JSON='{"name":"system_env"}' java -jar spring-boot-basic-externalized-configuration-0.0.1-SNAPSHOT.jar

**Результат выполнения:** Когда приложение включено таким образом, оно будет выведено в консоль.nameценностьsystem_env.

Конфигурация параметров командной строки

Параметры командной строки также часто используются таким образом.--Для настройки более распространенные команды--spring.profiles.active, используется для изменения активации при запускеprofile, и если мы хотим изменитьnameЗначение конфигурации свойства выглядит следующим образом:

java -jar spring-boot-basic-externalized-configuration-0.0.1-SNAPSHOT.jar --name=hengboy

или использовать--spring.application.jsonРежим также можно настроить следующим образом:

java -jar spring-boot-basic-externalized-configuration-0.0.1-SNAPSHOT.jar --spring.application.json='{"name":"hengboy"}'

**Результат выполнения: **Вышеупомянутые два метода могут быть использованы, и консоль выведетnameценностьhengboy.

Конфигурация свойств системы Java

JavaПри настройке через системные свойства используйте не только@ValueВы можете получить значение атрибута, используяjava.lang.System#getProperty(java.lang.String)также можно получить методом-DНастройте его следующим образом:

java -Dname=JavaSystemConfig -jar spring-boot-basic-externalized-configuration-0.0.1-SNAPSHOT.jar

или использовать-Dspring.application.jsonспособ настройки (таким образом используйтеSystem.getPropertyметод не может получить значение свойства), следующим образом:

java -Dspring.application.json='{"name":"JavaSystemConfig"}' -jar spring-boot-basic-externalized-configuration-0.0.1-SNAPSHOT.jar

**Результат выполнения: **Запустите приложение двумя указанными выше способами, консоль выведетnameценностьJavaSystemConfig.

**Примечание. **Конфигурация свойств Java должна быть-jar xxx.jarРаньше конфигурация не могла прочитать значения свойств позже.

Суммировать

Различные способы настройки свойств, позволяющиеSpringBootОн стал настолько гибким, что если вам интересно, вы можете попробовать все вышеперечисленные методы настройки, и вы получите неожиданные результаты.

пример кода

Если вам понравилась эта статья, нажмите на репозиторий исходного кодаStar,Спасибо! ! ! Образец исходного кода для этой статьи можно получить следующими способами.2.x, каталогspring-boot-basic-externalized-configuration:

автор личноблогИспользуйте фреймворк с открытым исходным кодомApiBootПомочь вам стать архитектором сервисов интерфейса API