База данных H2 не создает таблицу из schema.sql

Я новичок в Spring и начал следовать учебнику EazyBytes Udemy. Когда он начал говорить о том, как внедрить базу данных H2 в проект Spring Boot, я попытался применить это на практике.

В начале, после установки зависимости Maven базы данных H2, я не мог получить к ней доступ через консоль, потому что она постоянно говорила мне, что база данных не создана. Прочитав некоторые ответы о переполнении стека, я обнаружил, что БД больше не создается автоматически, и мне нужно перейти на более раннюю версию. Это то, что я сделал. Итак, мой pom.xml теперь выглядит так:

...

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.193</version>
    <scope>runtime</scope>
</dependency>

...

Я также создал schema.sql на уровне application.properties:

CREATE TABLE IF NOT EXISTS `contact_msg` (
  `contact_id` int AUTO_INCREMENT  PRIMARY KEY,
  `name` varchar(100) NOT NULL,
  `mobile_num` varchar(10) NOT NULL,
  `email` varchar(100) NOT NULL,
  `subject` varchar(100) NOT NULL,
  `message` varchar(500) NOT NULL,
  `status` varchar(10) NOT NULL,
  `created_at` TIMESTAMP NOT NULL,
  `created_by` varchar(50) NOT NULL,
  `updated_at` TIMESTAMP DEFAULT NULL,
  `updated_by` varchar(50) DEFAULT NULL
);

Мой application.properties выглядит так:

# Some Basic Spring Boot Configurations
...

# H2 Database Config
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

При попытке доступа .../h2-console все работает. В разделе «URL-адрес JDBC» я ввел jdbc:h2:mem:testdb, но когда я нажимаю «Подключиться», я получаю следующее:

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

В чем здесь может быть проблема?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
371
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Кажется, что этот ответ https://stackoverflow.com/a/65253359/14808001, связанный с тем, почему база данных не найдена, также устраняет проблему создания таблицы.

(хотя я не знаю, зачем мне нужен JDBC API, потому что я не делал никаких запросов к базе данных)

Ответ принят как подходящий

Я думаю, вам придется изменить свойство ddl-auto следующим образом:

spring.jpa.hibernate.ddl-auto=create-drop

Вы можете сделать это при первом запуске приложения, чтобы оно создало вашу схему, а в следующий раз вы можете вернуть ее в «обновление».

Другие вопросы по теме