Spring BootでMySQLを使う
「TomcatとApache HTTP ServerでSpring Bootアプリケーションをデプロイしてみる」では、作成したSpring BootアプリケーションをTomcat上にデプロイした。 しかし、現在の状態ではデータベースとしてH2を利用する状態になっている。 ここでは、アプリケーションを書き換え、データベースとしてMySQLを利用するようにしてみる。
環境
Ubuntu 16.04.2 LTS 64bit版
$ uname -a Linux vm-ubuntu64 4.4.0-72-generic #93-Ubuntu SMP Fri Mar 31 14:07:41 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.2 LTS Release: 16.04 Codename: xenial
サーバにMySQLをインストールする
まず、接続先となるMySQLサーバを用意する。 ここでは、TomcatをインストールしたサーバにMySQLをインストールすることにする。
aptを使い、MySQLをインストールするには次のようにする。 このとき、ダイアログに従いrootパスワードを適当に設定する。
$ sudo apt install mysql-server
MySQLに接続し、接続先となるデータベースと接続に利用するユーザを作成する。
$ mysql -u root -p Enter password: [type root password] mysql> CREATE DATABASE demo CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; Query OK, 1 row affected (0.00 sec) mysql> GRANT ALL PRIVILEGES ON demo.* TO demo@localhost IDENTIFIED BY 'youmustchangethis'; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) mysql> \q Bye
データベースの設定を行う
次に、アプリケーションを書き換え、MySQLデータベースを利用するように設定する。
MySQLを利用する場合、依存パッケージにMySQL Connector-Jを追加する必要がある。 プロジェクトにMySQL Connector-Jを追加するには次のようにする。
- 「demo [boot]」を右クリックして、「Maven」→「Add Dependency」を選択
- ダイアログの各フィールドに以下の文字列を入力してOK
Spring Bootでは、設定ファイルとしてpropertiesファイル(またはYAMLファイル)を使用する。 まず、application.propertiesに本番環境用のプロファイルを使う設定を記述する。
- src/main/resources/application.properties
spring.profiles.active=production
次に、本番環境用のプロファイルに接続先データベースの設定を記述する。
- src/main/resources/application-production.properties
spring.jpa.hibernate.ddl-auto=create spring.datasource.url=jdbc:mysql://localhost:3306/demo spring.datasource.username=demo spring.datasource.password=youmustchangethis
spring.jpa.hibernate.ddl-auto=create
を指定することで、アプリケーション起動時に必要なテーブルが作成される。
テーブルが作成された後は、update
に変更することでコードに合わせてテーブルが修正されるようになる。
Tomcatにデプロイする
「TomcatとApache HTTP ServerでSpring Bootアプリケーションをデプロイしてみる」と同様の手順でWARファイルをエクスポートし、ROOT##002.war
にリネームする。
続けて、Tomcat ManagerからROOT##002.war
をデプロイする。
アプリケーションに接続し、適当なデータを追加した後、MySQLデータベースを確認すると次のようになる。
$ mysql -u root -p Enter password: [type root password] mysql> use demo; Database changed mysql> show tables; +------------------+ | Tables_in_demo | +------------------+ | message | | user | | user_authorities | +------------------+ 3 rows in set (0.00 sec) mysql> select * from message; +----+---------------------+-------+-------------+-------+ | id | created_at | name | remote_addr | text | +----+---------------------+-------+-------------+-------+ | 1 | 2017-04-26 10:21:24 | name1 | 127.0.0.1 | text1 | | 2 | 2017-04-26 10:21:31 | name2 | 127.0.0.1 | text2 | | 3 | 2017-04-26 10:21:40 | name3 | 127.0.0.1 | text3 | +----+---------------------+-------+-------------+-------+ 3 rows in set (0.00 sec) mysql> \q Bye
上の結果から、Entityに対応するテーブルが作成されていること、追加したデータが挿入されていることが確認できる。
本番環境でMySQL、開発環境でH2を使う
本番環境ではMySQLを使うが、開発時はH2を使いたい場合がある。
このような場合は、開発時spring.profiles.active
の行を#
でコメントアウトしておき、WARファイルのエクスポート前にコメントアウトを外すようにすればよい。