Свойства, используемые для инициализации базы данных в Spring Boot, кажутся запутанными - PullRequest
0 голосов
/ 28 марта 2020

Привет! Я просматривал свойства инициализации базы данных, предоставленные Spring Boot. Меня немного смущают три свойства, которые влияют на инициализацию базы данных. Сначала я перечислю свое понимание:

1) spring.datasource.initialization-mode - это диск, когда должна выполняться именно инициализация базы данных.
Возможные значения -
- внедренный (по умолчанию) - это указывает на то, что инициализация базы данных должна быть сделано, когда база данных встроена.
- никогда - никогда не инициализировать базу данных
- всегда - всегда инициализировать базу данных

2) spring.jpa.generate-ddl - это указывает, должна ли база данных инициализироваться, когда JPA used .
Возможные значения -
- false (по умолчанию) - это означает, что инициализация базы данных не должна выполняться, когда JPA используется
- true - это указывает на инициализацию базы данных должно быть сделано, когда используется JPA
Если значение равно true, инициализация базы данных (DDL) будет выполняться с использованием сущностей JPA, аннотированных аннотациями JPA. для выполнения запросов DML data.sql / data - будет использоваться $ {platform}. sql.

3) spring.jpa.hibernate.ddl-auto - это может дополнительно настраивать или описывать действия, выполняемые в инициализированной базе данных. Возможные значения -
- create-drop (по умолчанию) - база данных будет всегда удаляться и создаваться каждый раз, когда база данных инициализируется
- нет - это не будет предпринимать никаких действий с инициализированной базой данных - обновление - это попытается синхронизировать c созданная база данных с объектами JPA и переопределение созданной структуры БД с определением объектов JPA, включая ограничения. Поэтому, когда JPA используется , spring.jpa.generate-ddl должен переопределить spring.datasource.initialization-mode, если присутствуют оба (хотя в моем случае это не так - пожалуйста, смотрите вопросы)

Теперь Мои вопросы - я запутываюсь в основном, когда все они используются одновременно.

- Когда БД находится в памяти (либо определяется автоматически, либо специально указывается с использованием свойства, связанного с платформой) и используется JPA

  • 1) Чтобы решить, должна ли база данных только инициализироваться spring.datasource.initialization-mode используется и свойство spring.jpa.generate-ddl не будет иметь эффекта? В моем случае мы не определили spring.jpa.generate-ddl. Это фактически означает, что у нас есть spring.jpa.generate-ddl=false. Тем не менее база данных инициализируется как spring.datasource.initialization-mode=always.
  • 2) если у нас есть включенный spring.datasource.initialization-mode = mode, он будет инициализирован, только если БД находится в памяти, даже если присутствует spring.jpa.generate-ddl=true?
  • 3) Если spring.datasource.initialization-mode=always или spring.datasource.initialization-mode=embedded и spring.jpa.hibernate.ddl-auto=update, созданная база данных будет обновлена ​​/ переопределена с использованием определений сущности JPA?
  • 4) Если схема. sql или схема - $ {in-memory-platform}. sql отсутствует, и база данных spring.datasource.initialization-mode=embedded или spring.datasource.initialization-mode=always будет создана с использованием определений сущностей JPA?

- Когда DB имеет значение Не в памяти (либо определяется автоматически, либо специально указывается с помощью свойства, связанного с платформой), а JPA используется

-1), что будет иметь приоритет spring.jpa.generate-ddl ИЛИ spring.datasource.initialization-mode, например, когда spring.jpa.generate-ddl=false и spring.datasource.initialization-mode=always ИЛИ когда spring.jpa.generate-ddl=true и spring.datasource.initialization-mode=never, который имеет приоритет, чтобы решить, следует ли инициализировать базу данных? -2) если отсутствует схема. sql или "scehama - $ {platform}. sql", будет ли выполнена инициализация базы данных с использованием определений сущностей JPA?

- Когда БД находится в памяти (либо автоматически обнаружено или специально указано с использованием свойства, связанного с платформой), а JPA - это не использованная

-1) схема. sql или схема - $ {platform}. sql must присутствовать ? так, чтобы при его инициализации создавалась база данных, если она включена? -2) spring.datasource.initialization-mode свойство будет использоваться для определения необходимости инициализации?

- Когда DB не находится в памяти (либо определяется автоматически, либо специально указывается с использованием свойства, связанного с платформой), а JPA - это , а не используется

-1) схема. sql или схема - $ {платформа}. sql должно присутствовать ? Так, чтобы при его инициализации создавалась дБ при * инициализации? 1082 *

...