Как пошалить с конфигурационным файлом приложения? Серия SpringBoot (2)

Spring Boot задняя часть
Как пошалить с конфигурационным файлом приложения? Серия SpringBoot (2)

расширятьНажмите, чтобы прыгнуть~:Сводка по обучению и расширение серии SpringBoot


@[toc]

предисловие

  • Рекомендуется установить пакет lombok, чтобы классу сущности не приходилось каждый раз вручную писать методы get, set, tostring и другие. Настоятельно рекомендуется~
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.16.10</version>
		</dependency>
  • После добавления аннотации @Data компилятор автоматически добавит за нас методы get, set и другие, что значительно уменьшит объем нашего кода и выглядит намного удобнее~

在这里插入图片描述

1. свойства приложения

  • грамматическая структура:
    • key=value

在这里插入图片描述

  • эффект:

    • Измените значение автоматической настройки SpringBoot по умолчанию, потому что SpringBoot автоматически настраивает его для нас внизу;
  • В отличие от традиции:

<server>
    <port>8888<port>
</server>
  • По сравнению с сейчас: намного проще.

在这里插入图片描述

2. приложение.yml

  • Официальная рекомендация: мы используем формат YML, потому что он проще, а функция мощнее.

  • Формат синтаксиса: ключ: значение пространства

    • Пробелы не могут быть опущены
    • Иерархическая связь управляется отступом, пока столбец данных, выровненный по левому краю, находится на одном уровне.
    • Атрибуты и значения чувствительны к регистру

在这里插入图片描述

  • массив записи yml: разрешены следующие два способа записи~

在这里插入图片描述

  • yml write object: разрешены следующие два способа записи~

在这里插入图片描述

Три, файл конфигурации инъекции yml

3.1, внедрение @Value (старая версия)

  • класс сущности
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Data
@Component
public class Person {
    @Value("小小丁小小")
    private String name;
    @Value("24")
    private Integer age;
    @Value("175")
    private String high;
    @Value("捕鱼")
    private String like;
}
  • результат выполнения модульного теста

在这里插入图片描述

  • недостатки
    • Если класс особенно сложный, писать его труднее.

3.2, инъекция мл

  • ①Создайте новый класс сущностей и добавьте аннотацию @Data.
import lombok.Data;

@Data
public class Student {
    private String name;
    private Integer age;
    private String high;
    private String like;
}
  • ② Написать профиль YML:
server:
  port: 7777

student:
  name: 大大丁大大
  age: 23
  high: 173
  like: 钓鱼
  • ③ Добавьте @Component в класс сущности, аннотацию @ConfigurationProperties (префикс = "Студент").
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "student")
public class Student {
    private String name;
    private Integer age;
    private String high;
    private String like;
}
- 注意点:会爆红,但是不影响程序的执行,我们可以去除这个爆红。点击Open Documentation

在这里插入图片描述 Вы также можете нажать здесь ~ 在这里插入图片描述Импорт можно добавить здесь, в файле pom.

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>
  • Идеальное решение

在这里插入图片描述

  • ④ Пишите модульные тесты и внедряйте классы сущностей
import com.dyjTest.dyjProject.entity.Student;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class DyjProjectApplicationTests {

	@Autowired(required = false)
	Student student;

	@Test
	void contextLoads() {
		System.out.println(student);
	}

}

Результат выполнения следующий:在这里插入图片描述АхИскажено! Решить ТА!在这里插入图片描述Выполнить снова: результат следующийИдеальное решение! !在这里插入图片描述

  • Суммировать

在这里插入图片描述

В-четвертых, @PropertySource загружает указанный файл конфигурации.

  • @PropertySource:Загрузить указанный файл конфигурации

  • @configurationProperties:По умолчанию значение берется из файла глобальной конфигурации;

  • ① Создайте новый файл person.yml

在这里插入图片描述

  • ②Класс объекта
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Data
@Component
@PropertySource("classpath:person.yml")
public class Person {
    @Value("${name}")
    private String name;
    private Integer age;
    private String high;
    private String like;
}
  • ③ Результат выполнения модульного теста выглядит следующим образом:

在这里插入图片描述

5. Заполнители файла конфигурации

  • заполнитель для генерации случайных чисел
${random.value}、${random.int}、${random.long}
${random.int(10)}、${random.int[1024,65536]}

在这里插入图片描述

Шесть, приоритет нескольких файлов конфигурации yml

  • Если одновременно два конфигурационных файла, properties и yml, если они не конфликтуют, то будут дополнять друг друга, и наоборотВ основном свойства.
  • Может быть размещен в следующих четырех позициях

在这里插入图片描述

  • ①В корневом каталоге
  • ②В каталоге config корневого каталога
  • ③В каталоге config в каталоге ресурсов
  • ④В каталоге ресурсов

在这里插入图片描述

  • Выполните следующее, чтобы увидеть порядок приоритета

① Одновременное существование: выполнениеФайлы конфигурации в каталоге config корневого каталога 在这里插入图片描述

②Удалите предпосылку ①: реализацияконфигурационный файл в корневом каталоге 在这里插入图片描述

③Удалите предпосылку ①②: реализацияФайлы конфигурации в каталоге config в каталоге ресурсов 在这里插入图片描述

④Удалить предпосылку ①②три: она будет выполненакаталог ресурсовЭто расположение по умолчанию在这里插入图片描述

  • Общий порядок: ②>①>③>④
    • Файл конфигурации в каталоге config корневого каталога > файл конфигурации в корневом каталоге > файл конфигурации в каталоге config в каталоге ресурсов > каталог ресурсов (расположение по умолчанию)

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

7.1 Укажите файл конфигурации

  • В реальной разработке у нас может быть много наборов сред, таких как среда разработки (dev), среда в градациях серого (pre), онлайн-среда (prod), и нам нужно несколько файлов конфигурации для управления информацией о конфигурации этих сред.
  • yml поддерживает конфигурацию с несколькими средами следующим образом:在这里插入图片描述
  • В основной конфигурационный файл можно передать: указать в каком конфигурационном файле запускать проект согласно
spring:
  profiles:
    active: 环境名
  • Попробуйте:
    • указать разработчика

在这里插入图片描述- указать продукт在这里插入图片描述

Удобен ли yml? Это экономит нам много работы~~

7.2 Как автоматически выбирать файлы конфигурации в реальной разработке

  • В реальной работе мы не можем указать файл конфигурации вручную, иначе нам придется указывать его каждый раз, когда мы отправляем пакет, что за хлопоты~
  • Давайте объединим вышеуказанный метод с pom.xml, чтобы оптимизировать его, давайте определим, что нам нужно.упакованная среда
  • ① Новые варианты упаковки для файлов pom.
<!--打包选择环境-->
	<profiles>
		<profile>
			<id>dev</id>
			<properties>
				<env>dev</env>
			</properties>
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
		</profile>
		<profile>
			<id>pre</id>
			<properties>
				<env>pre</env>
			</properties>
			<activation>
				<activeByDefault>false</activeByDefault>
			</activation>
		</profile>
		<profile>
			<id>prod</id>
			<properties>
				<env>prod</env>
			</properties>
			<activation>
				<activeByDefault>false</activeByDefault>
			</activation>
		</profile>
	</profiles>

Обновите maven, и вы увидите, что наша структура maven изменилась:在这里插入图片描述

  • ②Обозначение основного файла конфигурации должно быть заполнителем
spring:
  profiles:
    active: '@env@'
  • ③Выберите указанную среду, чтобы начать проект: идеально соответствует нашим потребностям! ! !

在这里插入图片描述

7.3, yml, один файл, несколько конфигураций

  • yml также может выполнять несколько конфигураций в одном файле.
  • Синтаксис выглядит следующим образом
server:
  port: 6666
---
server:
  port: 7777
---
server:
  port: 8888
  • свойства не поддерживает это письмо

Это конец игры о файле конфигурации приложения~


Впереди долгий путь, и я обязательно буду его искать вдоль и поперёк~Если вы думаете, что я блогеры хорошо пишу! Писать нелегко, ставьте лайки, подписывайтесь и комментируйте, чтобы поощрить блоггеров~Пожалуйста, указывайте источник при перепечатке~