68372


[spring-petclinic/spring-petclinic-kotlin: Kotlin version of Spring
Petclinic](https://github.com/spring-petclinic/spring-petclinic-kotlin) は

> Databases: H2 and MySQL both supported

とあるので、H2とMySQLをサポートしています。

動かしてみると、デフォルトではH2で動いているようです。どうすればMySQLで動かせますか？


CC BY-SA 4.0
2020-07-07T12:52:54.373
68371
2020-07-08T03:31:30.347
9008
question
mysql spring kotlin spring-boot
spring-petclinic-kotlinをMySQL（もしくはMariaDB）を使って動かす方法が知りたい


[spring-petclinic-kotlin/petclinic_db_setup_mysql.txt at master · spring-
petclinic/spring-petclinic-kotlin](https://github.com/spring-petclinic/spring-
petclinic-
kotlin/blob/master/src/main/resources/db/mysql/petclinic_db_setup_mysql.txt)
に解説があります。

一部引用:

[code]

    1) Download and install the MySQL database (e.g., MySQL Community Server 5.1.x),
       which can be found here: https://dev.mysql.com/downloads/. Or run the
       "docker-compose.yml" from the root of the project (if you have docker installed
       locally):
    
            $ docker-compose up
            ...
            mysql_1_eedb4818d817 | MySQL init process done. Ready for start up.
            ...
    
    2) (Once only) create the PetClinic database and user by executing the "db/mysql/user.sql"
       scripts. You can connect to the database running in the docker container using
       `mysql -u root -h localhost --protocol tcp`, but you don't need to run the script there
       because the petclinic user is already set up if you use the provided `docker-compose.yaml`.
    
    3) Run the app with `spring.profiles.active=mysql` (e.g. as a System property via the command
       line, but any way that sets that property in a Spring Boot app should work).
    
[/code]

この通りやればいいのですが、行間を読まないといけないポイントがあるので、下記に記載します。

## db/mysql/user.sqlの実行

`db/mysql/user.sql`を実行しろとありますので、やりますが、プロジェクトのトップディレクトリからだともっと長いパスが必要です。またどのように実行するのかは各自の判断にまかされます。  
**mysqlクライアントに入って**

[code]

    source src/main/resources/db/mysql/user.sql
    
[/code]

を実行するとよいと思います。

ちなみに user.sql の中身は下記のようになっています。

[code]

    CREATE DATABASE IF NOT EXISTS petclinic;
    
    ALTER DATABASE petclinic
      DEFAULT CHARACTER SET utf8
      DEFAULT COLLATE utf8_general_ci;
    
    GRANT ALL PRIVILEGES ON petclinic.* TO 'petclinic@%' IDENTIFIED BY 'petclinic';
    
[/code]

MySQL的には`%`は`localhost`を含んでいないようなので、 **localhostから接続したい場合は**
、user.sqlの`GRANT`を下記のように書き換えて実行したほうがよいです。

[code]

    GRANT ALL PRIVILEGES ON petclinic.* TO 'petclinic'@'localhost' IDENTIFIED BY 'petclinic';
    
[/code]

## spring.profiles.active=mysqlでアプリをRunする

`spring.profiles.active=mysql`でアプリをRunすると書いてますが、具体的なRun方法が書いてません。  
どのように実行すればいいかというとターミナルで、下記のようにします。

[code]

    ./gradlew bootRun --args='--spring.profiles.active=mysql'
    
[/code]

## 参考

  * [mysql - Are Users 'User'@'%' and 'User'@'localhost' not the same? - Stack Overflow](https://stackoverflow.com/questions/11634084/are-users-user-and-userlocalhost-not-the-same)
  * [java - How to run bootRun with spring profile via gradle task - Stack Overflow](https://stackoverflow.com/questions/36923288/how-to-run-bootrun-with-spring-profile-via-gradle-task/57890208#57890208)


CC BY-SA 4.0
2020-07-07T12:52:54.373
68372
2020-07-08T03:31:30.347
2020-07-08T03:31:30.347
9008
9008
68371
answer