Когда пишу yml, у меня болит нога.

Spring Boot задняя часть Kubernetes

Оригинал: Miss Sister Taste (идентификатор публичной учетной записи WeChat: xjjdog), добро пожаловать, пожалуйста, сохраните источник для перепечатки.

Мне очень стыдно, чтобы обнаружить, что файл конфигурации был правит следующим тремя:yaml,tomlиjson, что заставляет javaer, который использовал файл свойств, глубоко зарыться в землю.

Не волнуйтесь, когда вы дойдете до конца статьи, вы спрячете голову от стыда.

Как и различные параметры настройки искусственного интеллекта, мастера настройки параметров k8s были успешно обновлены до мастеров конфигурации yml. Как пользователь среды SpringBoot, который использует файлы yml круглый год, иногда возникает путаница в отношении выражения yml, что не может не добавить еще один слой стыда.

YAML оказался подмножеством XML, поэтому его сложность имеет источник, впервые появившийся в 2009 году.

Использование файлов YML, первая проблема с проблемами - это его проблема вдавливания. Как и язык Python, уровень презентации файла YML достигается вложенным вдавливанию. Вместо того, чтобы использовать вкладку, он использует пробелы для отступа.

Проблема в том, сколько места не важно, главное, чтобы левые элементы одного уровня можно было выровнять по линии. Эта вечеринка с резюме должна была быть кошмаром, ха-ха.

Этот один файл конфигурации, какие проблемы он должен решить? Редис уже ответил. Это похоже на то, что вы изучаете новый язык, выяснили, как представлять строки и множества, и вы в принципе можете писать код. Тогда давайте посмотрим один за другим.

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

@EnableAutoConfiguration
@Configuration
public class TestConfig implements InitializingBean {
    @Value("${str1}")
    String str1;
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println(this);
    }
}

1. Строка

Строки представляют собой простейшую и наиболее распространенную конфигурацию. Spring строки можно заменять кавычками или без кавычек. Таким образом, эффект конфигурации следующих трех строк одинаков.

str1: ksdfjsdlkfjdsf skdfljs
str1: 'ksdfjsdlkfjdsf skdfljs'
str1: "ksdfjsdlkfjdsf skdfljs"

Итак, как поддерживать многострочный текст? Ведь некоторые потребности именно такие. Это написано следующим образом:

str1: |
  ksdfjsdlkfjdsf skdfljs
  ksdfjsdlkfjdsf skdfljs
  ksdfjsdlkfjdsf skdfljs

Обратите внимание, что в бэкэнде не нужно иметь еще один лишний текст, который говорит, что все находится на отступе, чтобы доказать. Конечно, вы также можете поставить|заменить>Эффект тот же.

str1: >
  ksdfjsdlkfjdsf skdfljs
  ksdfjsdlkfjdsf skdfljs
  ksdfjsdlkfjdsf skdfljs

Плохо то, что у него есть третий способ написания.

str1: "ksdfjsdlkfjdsf skdfljs
  ksdfjsdlkfjdsf skdfljs
  ksdfjsdlkfjdsf skdfljs"

2. Числа

Когда наш приемник является числом, например следующим.

@Value("${a}")
int a ;

Тогда, даже если вы запишете конфигурационный файл в виде строки, он будет принудительно преобразован в число.

a: "014"

В это время значение a будет установлено равным целому числу 14.

Удивительно, если вы удалите кавычки, это настолько ниже.

a: 014

На этот раз значение a оказалось равным 12!

Я сталкивался с такой превосходной ошибкой раньше, тратя впустую много клеток мозга, wtf. Поскольку он начинается с 0, он представляет восьмеричное число, а синтаксический анализатор выполняет преобразование посередине. Следовательно, согласно этой логике, 0x14 — это 20, и вы должны обращать на это внимание при его использовании. Умные ученики могут использовать его, чтобы зарыть яму.

Здесь также есть специальные орфограммы.

float: 1.23e+3     # 浮点数
fixed: 13.67       # 固定小数
minmin: -.inf      # 表示负无穷
notNumber: .NaN    # 无效数字

boolean: [true, false] # 布尔值
string: '12345'    # 字符串

date: 2021-06-03   # 日期

3. Словарь

Давайте снова обратимся к общему словарю. По сути, перечисление всех конфигураций само по себе является словарем, то есть конфигурацией kv.

это:Разделена, поэтому левая половина требований не может иметь специальных символов, иначе Yun Cai. Нет, нет, это не Yun Cai, потому что это беспорядок персонажей, правильная идентификация. Конфигурация YML такая как следующая.

a&& xk@71: 0x14

Такой код получен.

@Value("${a&& xk@71}")
int a ;

Ну, легко быть забитым до смерти. Итак, вы поняли идею.

Или я слишком наивен, в файле yml не указано, что ключ не может иметь специальные символы, он позволяет вам это сделать.

4. Объекты

Из словарей это легко распространить на объекты. Потому что объект также является набором свойств. JSON доказал, что эти свойства представляют собой кучу KV, как и наш yaml.

Предположим, что есть следующий код, нам нужно построить данные в dog.

@Data
public static class Dog{
    private String xjjdog1;
    private String xjjdog2;
}

@Bean
@ConfigurationProperties(prefix = "dog")
public Dog getDog(){
    return new Dog();
}

Первый способ написать yml выглядит так.

dog:
  xjjdog1: i am xjjdog1
  xjjdog2: i am xjjdog1++

Другой способ — записать данные json непосредственно в файл.

dog: {xjjdog1: 'i am xjjdog1',xjjdog2: 'i am xjjdog++'}

Конечно, несколько уровней можно разложить подряд. Например префикс super.dog, тогда yml файл можно записать так.

super.dog: {xjjdog1: 'i am xjjdog1',xjjdog2: 'i am xjjdog++'}

5. Список поддержки

Список — это список, мы можем использовать массив для его получения, или мы можем использовать список и так далее.

Тоже пишется двояко. Это самый распространенный.

animal:
  - dog
  - cat
  - monkey

Конечно, вы также можете поместить его в одну строку.

animal: [dog,cat,monkey]

С этим проблем нет, ключ вложен в поддержку файлов YML. Например, список завершен на карте или карта завершена. Когда уровень вложенности относительно глубокий, он очень хаотичен, когда нет закона.

Например, следующая конфигурация модуля k8s.

apiVersion: v1
kind: Pod
metadata:
  name: xjjdog-Pod
  labels:
    app: front-web
spec:
  containers:
    - name: front-web
      image: nginx
      ports:
        - containerPort: 80
    - name: front-app
      image: xjjdog/frontapp
      ports:
        - containerPort: 14000
  storages:
  ...

Более сложной является спецификация, которая содержитcontainers,storagesи т.п. конфигурация. Среди них контейнеры — это список, а между списками — карта, Атрибут порты в карте — это тоже список… Так что вложенные, если файл конфигурации относительно длинный, студенты, не знакомые с бизнес-атрибутами, будут легко спутать..

6. Специальные данные

Тем не менее, yaml также намного проще, чем xml. Он также имеет много специальных формулировок.

Например, это.

str1: !!str 2021-06-03

Это означает принудительно ввести 2021-06-04 в строку. Таких бросков много, но в большинстве случаев вы их не будете использовать. Но если вы хотите усложнить свой yaml-файл, чтобы другие боялись его трогать, то вы можете это сделать.

 !!int               # 整数类型
 !!float             # 浮点类型
 !!bool              # 布尔类型
 !!str               # 字符串类型
 !!binary            # 也是字符串类型
 !!timestamp         # 日期时间类型
 !!null              # 空值
 !!set               # 集合
 !!omap, !!pairs     # 键值列表或对象列表
 !!seq               # 序列,也是列表
 !!map               # 键值表

Поскольку в файле yml так много сложных способов записи, мы можем поиграть с ним. Например, следующее письмо.

from: &d !!str 2021-06-04
str1: *d

Эта конфигурация и вышеуказанная конфигурация имеют одинаковый эффект,&означает знак, мы даем ему имя, это называетсяd;*Это значит цитировать, мы можем цитировать там, где нам это нужно.

Ключ в YML, также может быть использован в качестве ключа с объектами или сложными структурами. Для того, чтобы определить специальный ключ, мы должны что-то сделать.

?[blue, reg, green]: Color

Конфигурация выше?, то есть дальше я сделаю более сложную конфигурацию, вы готовы?

7. End

Изучив эти трюки, вы хотите попробовать? Хотите сделать что-то интересное в своем проекте SpringBoot? Почему бы и нет, чтобы отдел инфраструктуры не сканировал вашу конфигурацию?

Это файл конфигурации обычного источника данных, который я преобразовал.

h2: &sa !!str sa
driver: &driver !!str org.h2.Driver
defaults: &defaults
  ?username: *sa
  ?password:
  ?driverClassName: *driver
spring:
  datasource:
    <<: *defaults
    ?url: !!str >
      jdbc:h2:mem:h2test;
      DB_CLOSE_DELAY=-1;
      DB_CLOSE_ON_EXIT=FALSE

Вы чувствуете себя красивой? У меня все равно нога болит.

Об авторе:Мисс сестра вкус(xjjdog), публичная учетная запись, которая не позволяет программистам идти в обход. Сосредоточьтесь на инфраструктуре и Linux. Десять лет архитектуры, десятки миллиардов ежедневного трафика, обсуждение с вами мира высокой параллелизма, дающие вам другой вкус. Мой личный WeChat xjjdog0, добро пожаловать в друзья для дальнейшего общения.​