Google App Engine フレキシブル環境と Spring Boot と第2世代 Cloud SQL (MySQL) で少しハマった話

スポンサーリンク

Google App Engine フレキシブル環境の上で Spring Boot 2.0.0.BUILD-SNAPSHOT を起動させて Hibernate を使用して第2世代 Cloud SQL (MySQL) と接続してみました。

application.properties で、spring.jpa.hibernate.ddl-auto = create などと設定してもアプリケーションは起動するものの、ログを見ると自動作成されるはずのデータベースのテーブルが作成されていない模様。

[ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
...
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement at 
...
Caused by: java.sql.SQLException: Storage engine MyISAM is disabled (Table creation is disallowed).

Google Cloud Platform のドキュメントに何か書かれていないか探してみます。

Cloud SQL – ドキュメント – MySQL – Cloud SQL インスタンスでの問題を診断する
https://cloud.google.com/sql/docs/mysql/diagnose-issues

「データベース エンジン」のところに書かれていました。

InnoDB は、第 2 世代インスタンス用としてサポートされている唯一のストレージエンジン

というわけで、Spring Boot の application.properties に下記を追加しておきます。

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

application.yml なら例えば下記のように。

spring:
  jpa:
    hibernate:
      ddl-auto: create
  properties:
    hibernate:
      dialect: org.hibernate.dialect.MySQL5InnoDBDialect

再度アプリケーションをデプロイすると、MySQL5InnoDBDialect が使用され、きちんとテーブルが自動で作成されていました。

[ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect