hibernate ddl-auto не работает с MySql, но работает с H2 - PullRequest
0 голосов
/ 26 мая 2020

Я закончил свое приложение для весенней загрузки и теперь пытаюсь развернуть его с помощью docker -compose. При разработке я использовал БД H2 в памяти, и все было хорошо. Теперь я пытаюсь переключить источник данных на MySql, а спящий режим не создает никаких таблиц в базе данных MySql. Затем мое загрузочное приложение Spring пытается выполнить некоторые действия и не может найти никаких таблиц (потому что оно не было создано при запуске). У меня есть исключения вроде

Caused by: java.sql.SQLSyntaxErrorException: Table 'db.test_run' doesn't exist

. Я пытался переключить ddl-auto на create-drop или update и получил тот же результат. Моя конфигурация:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db
    username: user
    password: password
    driverClassName: com.mysql.cj.jdbc.Driver
    jpa:
      database: mysql
      database-platform: org.hibernate.dialect.MySQL8Dialect
      show-sql: true
      hibernate:
        ddl-auto: create
  jackson:
    serialization:
      write-dates-as-timestamps: false 

Db работает, и я могу подключиться к нему через браузер Idea, и я могу создавать таблицы с пользователем «пользователь». Конфигурация моего MySql сервера в docker -compose:

 db:
    image: mysql/mysql-server
    restart: always
    environment:
      MYSQL_DATABASE: 'db'
      MYSQL_USER: 'user'
      MYSQL_PASSWORD: 'password'
      MYSQL_ROOT_PASSWORD: 'password'
    ports:
      - 3306:3306
    expose:
      - 3306 

Я думаю, мои классы приложений в порядке, потому что они работают с h2 DB, а таблицы все еще создаются с h2. Я использую Spring Boot 2.1.6 и последнюю docker изображение MySql 8.0.20

1 Ответ

0 голосов
/ 26 мая 2020

Хорошо, я решил, раздел "jpa" должен находиться в разделе "spring", а не в разделе "источник данных". И это работало с h2, потому что данные Spring по умолчанию использовали ddl-auto: create-drop для встроенных баз данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...