spring - 如何在 Spring Boot 2 JPA 应用程序中选择 InnoDB 或 XtraDB 作为 MariaDB 中的存储引擎

标签 spring hibernate spring-boot spring-data-jpa mariadb

我正在使用 Spring Boot 2.0.0.M6 和 Spring Data JPA 开发一个新应用程序。我正在使用 MariaDB v10。 下面是我的开发属性文件。

spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.url=jdbc:mariadb://localhost:3306/testdb
spring.datasource.username=user
spring.datasource.password=
spring.jpa.show-sql=true
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
org.hibernate.dialect.Dialect=MariaDB53Dialect
spring.jooq.sql-dialect=MariaDB53Dialect

我得到输出:

Hibernate: create table hibernate_sequence (next_val bigint) engine=MyISAM

我无法更改存储引擎。所有表都是使用存储引擎 MyISAM 创建的。

我能够使用其他存储引擎手动创建表。但出于某种原因,Spring 或 Hibernate 仅退回到 MyISAM 引擎。

对于纯 Hibernate-Java 应用程序,Hibernate 默认使用 InnoDB。

INFO: HHH000412: Hibernate Core {5.2.11.Final}

Hibernate: create table hibernate_sequence (next_val bigint) engine=InnoDB

有什么方法可以从 Spring Boot 属性覆盖数据库存储引擎吗?

最佳答案

作为described in Spring Boot's documentation ,所有以 spring.jpa.properties 为前缀的属性都将传递给底层 JPA 提供程序(在本例中为 Hibernate),并删除前缀。

配置方言的 Hibernate 属性是 hibernate.dialect,它的值应该是您要使用的方言的完全限定类名。在本例中是 org.hibernate.dialect.MariaDB53Dialect

综上所述,您可以在 application.properties 中设置以下属性:

 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDB53Dialect

有了这个,基于 Spring Boot 的应用程序就可以使用 MariaDB 方言了:

2017-11-09 14:18:17.557  INFO 69955 --- [ost-startStop-1] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MariaDB53Dialect

关于spring - 如何在 Spring Boot 2 JPA 应用程序中选择 InnoDB 或 XtraDB 作为 MariaDB 中的存储引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47172085/

相关文章:

java - 从 List<T> 列表对象获取 Page<T> 页面对象

java - 使用 Hibernate/Spring 生成数据库更新脚本

java - Hibernate Criteria 查询多个类(或受子类列表限制)

java - 我可以将复杂对象作为输入传递给 Spring WebFlow 子流吗?

'DTYPE' 中的 java、MySQL 和未知列 'field list'

java - JPA如何使用级联删除删除作为onetoone目标的实体

java - Spring - 安全配置中定义的 Bean 创建顺序

java - 独立运行时 JMX 不适用于 spring boot 应用程序

java - Spring 多个打开的连接

java - 为什么 Spring Value 中的默认值不能防止 NULL 错误?