Практика внешнего файла конфигурации SpringBoot

Spring Boot

Введение

Приложения SpringBoot сканируются по умолчаниюclasspath:,classpath:/config,file:,file:config/в каталогеapplication*Профиль, приоритет от низкого к высокому.

  • Если вам нужно собственное имя, вы можете использоватьspring.config.name="custom"
  • Если вам нужно настроить каталог сканирования, вы можете использоватьspring.config.location="/Users/tengchong/Desktop/", после добавления директория сканирования станет:
    1. classpath:
    2. classpath:/config
    3. file:
    4. file:config/
    5. file:/Users/tengchong/Desktop/

приоритет от низкого к высокому

развертывание пакета jar

Развертывание пакетов jar может быть выполнено при запуске черезspring.config.locationЧтобы указать каталог, в котором находится файл конфигурации,spring.profiles.activeУкажите среду

  • команда запуска
java -jar easy-frame.jar --Dspring.config.location=/Users/tengchong/Desktop/ --spring.profiles.active=prod

При запуске вы можете увидеть информацию о выводе файла конфигурации сканирования в журнал

13:09:51 demo [main] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Activated activeProfiles prod
13:09:51 demo [main] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Profiles already activated, '[dev]' will not be applied
13:09:51 demo [main] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Loaded config file 'jar:file:/Users/tengchong/Desktop/easy-frame.jar!/BOOT-INF/classes!/application.yml' (classpath:/application.yml)
13:09:51 demo [main] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Loaded config file 'file:./application-prod.yml' (file:./application-prod.yml) for profile prod
13:09:51 demo [main] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Loaded config file 'jar:file:/Users/tengchong/Desktop/easy-frame.jar!/BOOT-INF/classes!/application-prod.yml' (classpath:/application-prod.yml) for profile prod

В журнал загружаются три файла конфигурации (порядок загрузки не имеет ничего общего с приоритетом):

  1. classes!/application.ymlОбщая конфигурация в банке
  2. file:./application-prod.yml /Users/tengchong/Desktop/Соответствующая конфигурация среды prod в каталоге
  3. classes!/application-prod.ymlСоответствующая конфигурация среды prod в банке вclasses!/application-prod.ymlДублированная часть конфига будет заменена наfile:./application-prod.ymlпокрытие из-заapplication.ymlнастроен вspring.profiles.active=devИтак, вот подсказкаProfiles already activated, '[dev]' will not be appliedЗдесь его можно проигнорировать, потому что параметр вspring.profiles.activeПриоритет выше, чем здесь.

развертывание военного пакета

Развертывание военного пакета можно выполнить, установивJAVA_OPTSдля настройки параметров здесьapache-tomcat-8.5.40пример

  • Исправлятьbin/catalina.sh
vi ./bin/catalina.sh
  • Добавьте параметры, около строки 250
JAVA_OPTS="$JAVA_OPTS -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dspring.config.location=/Users/tengchong/Desktop/ -Dspring.profiles.active=prod"
  • Запустить tomcat после сохранения
./bin/startup.sh

В лог выводится следующая информация

13:23:53 demo [main] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Activated activeProfiles prod
13:23:53 demo [main] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Loaded config file 'file:/Users/tengchong/Desktop/application-prod.yml' (file:/Users/tengchong/Desktop/application-prod.yml) for profile prod

Обнаружено, что приложение не сканируется при запускеclasspath:,classpath:/config,file:,file:config/Каталог только сканируетсяspring.config.locationУказанный каталог, конкретная причина которого неизвестна, будет временно примененapplication.ymlтакже положить/Users/tengchong/Desktop/можно успешно начать после

Если вы знаете причину, по которой каталог `classpath:, classpath:/config, file:, file:config/` не сканируется под tomcat, сообщите мне об этом, спасибо.

13:26:51 demo [main] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Activated activeProfiles prod
13:26:51 demo [main] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Profiles already activated, '[dev]' will not be applied
13:26:51 demo [main] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Loaded config file 'file:/Users/tengchong/Desktop/application.yml' (file:/Users/tengchong/Desktop/application.yml)
13:26:51 demo [main] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Loaded config file 'file:/Users/tengchong/Desktop/application-prod.yml' (file:/Users/tengchong/Desktop/application-prod.yml) for profile prod

из-заapplication.ymlнастроен вspring.profiles.active=devИтак, вот подсказкаProfiles already activated, '[dev]' will not be appliedЭто можно игнорировать или удалить/Users/tengchong/Desktop/application.ymlсерединаspring.profiles.active=dev,потому чтоJAVA_OPTSсерединаspring.profiles.activeПриоритет выше, чем здесь.

Если вы знаете, что под tomcat нет сканированияclasspath:,classpath:/config,file:,file:config/Пожалуйста, дайте мне знать причину каталога, спасибо

Укажите на ошибки, спасибо