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

abc*_*f12 3 spring hibernate mariadb spring-data-jpa spring-boot

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

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
Run Code Online (Sandbox Code Playgroud)

我得到输出:

Hibernate: create table hibernate_sequence (next_val bigint) engine=MyISAM
Run Code Online (Sandbox Code Playgroud)

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

我可以使用其他存储引擎手动创建表.但出于某种原因,Spring或Hibernate只会回归到MyISAM引擎.

使用纯Hibernate-Java应用程序,Hibernate默认使用InnoDB.

信息:HHH000412:Hibernate Core {5.2.11.Final}

Hibernate:创建表hibernate_sequence(next_val bigint)engine = InnoDB

有没有办法从Spring Boot属性覆盖数据库存储引擎?

谢谢

And*_*son 6

Spring Boot的文档中所述,所有以前缀为前缀的属性都会spring.jpa.properties被传递给底层的JPA提供程序(在本例中为Hibernate)并删除了前缀.

用于配置方言的Hibernate属性是hibernate.dialect,它的值应该是您要使用的方言的完全限定类名.在这种情况下org.hibernate.dialect.MariaDB53Dialect.

将上述内容放在一起,您可以在以下内容中设置以下属性application.properties:

 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDB53Dialect
Run Code Online (Sandbox Code Playgroud)

有了这个,你的基于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
Run Code Online (Sandbox Code Playgroud)