【发布时间】:2020-09-13 08:57:00
【问题描述】:
我已经完成了我的 Spring Boot 应用程序,现在我正在尝试使用 docker-compose 来部署它。在开发过程中,我使用了 H2 内存数据库,一切都很好。现在我正在尝试将数据源切换到 MySql 并且休眠没有在 MySql 数据库中创建任何表。然后我的 Spring Boot 应用程序尝试执行一些操作并且找不到任何表(因为它不是在启动时创建的)。 我有例外,例如
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 浏览器连接到它,我可以使用“用户”用户创建表。 docker-compose 中的 MySql 服务器配置:
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
【问题讨论】:
-
你使用 Spring Data Jpa 吗?因为 ddl-auto 是 Data JPA 特定的属性。在其他情况下,您必须使用 hbm2ddl.auto 属性。此外,自动 ddl 仅创建表,确保创建了 shema(无论如何它都应该由 docker prop 完成),并且所有必要的特权都已授予您使用该应用程序的用户。
-
尝试使用
spring.jpa.generate-ddl = true
标签: mysql spring hibernate spring-boot jpa