Знания меняют судьбу, программирование делает меня счастливым, и я продолжу шагать в мире открытого исходного кода в 2020 году.
Ставьте лайк и смотрите снова, формируйте привычку
дай мне звезду,Нажмите, чтобы узнать о решении для посадки службы компонентного интерфейса на основе SpringBoot.
SpringBootобеспечивает внутреннюю конфигурациюapplication.ymlфайл для глобальной конфигурации, а также поддерживает использованиеprofilesЧтобы активировать использование разных файлов конфигурации в разных средах, и этот метод был упакован в конце концов, поэтому существуют определенные ограничения, такие как специальная конфиденциальная конфигурация базы данных, также может иметь риск утечки, как решить эту проблему? Давайте посмотрим на способы внешней настройки, о которых мы поговорим в этой главе! ! !
Рекомендуемое чтение
предисловие
SpringBootПредоставляет множество методов внешней настройки, в основном для облегчения запуска одного и того же кода в разных средах.
мы можем пройтиProperties文件,YAML文件,环境变量,命令行参数и т. д. для настройки, при получении значения конфигурации вы можете передать@ValueАннотация для инъекций, вы также можете использовать@ConfigurationPropertiesАннотация сделанаИерархическая структураПривязать к полю класса сущности.
порядок загрузки
SpringBootСуществует определенный порядок параметров конфигурации, разумеется, конфигурация атрибутов с одинаковыми именами будет существовать из-за приоритета загрузки.покрытие, в следующем порядке:
-
DevToolsУстановить свойства глобально -
@TestPropertySourceаннотация -
propertiesтестируемые свойства - аргументы командной строки
-
SPRING_APPLICATION_JSONКонфигурация свойств (встроенные строки JSON, встроенные в переменные среды или системные свойства) -
ServletConfigПараметры инициализации -
ServletContextПараметры инициализации -
JNDIАтрибутыjava:comp/env - Свойства системы Java
- переменные среды операционной системы
- Файлы конфигурации упакованы внутри jar (
application.propertiesа такжеYAMLдокумент) -
@PropertySourceаннотация - Свойства по умолчанию (через
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:
- Гостиница:git ee.com/sh-wave-with/spr…
автор личноблогИспользуйте фреймворк с открытым исходным кодомApiBootПомочь вам стать архитектором сервисов интерфейса API