初心者がSpringアプリをHerokuにデプロイしてDB接続してみた

# はじめに
勉強会でSpringアプリを作ったのでHerokuにデプロイしてみました。
作業の流れと参考になったリンクをまとめておきます。

# 環境
・Windows10(64bit)
・Java 1.8.0_231
・Spring framework 5.0.2
　　・thymeleaf 3.0.9
・MySQL 8.0.15
・Git 2.21.0
・heroku 7.24.1

# 事前準備
####・Herokuアカウントの作成
https://signup.heroku.com/

####・Heroku CLIのインストール
https://toolbelt.heroku.com/

# Heroku用にSpringアプリを設定
####・SpringアプリのルートディレクトリにProcfileの追加
ProcfileではHerokuアプリの起動時に実行されるコマンドを指定できます。

```text:Procfile
web: java $JAVA_OPTS -jar target/dependency/webapp-runner.jar --port $PORT target/*.war
```
  
####・pom.xmlの編集
Procfileで設定したコマンドで起動できるように準備します。

まず、`target/*.war`でwarを指定したので、warを作成するように書きかえます。

```xml:pom.xml
<packaging>war</packaging>
```

また、`webapp-runner`はHerokuで内部的にTomcatを実行してくれます。こちらも追記しましょう。

```xml:pom.xml
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals><goal>copy</goal></goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>com.github.jsimone</groupId>
                                <artifactId>webapp-runner</artifactId>
                                <version>9.0.19.0</version>
                                <destFileName>webapp-runner.jar</destFileName>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
```
# Herokuにプロジェクトを作成＆プッシュ
####①コマンドプロンプトでSpringアプリのルートディレクトリまで移動する

```sh
$ cd C:\\git\\SpringApp
```
（小ネタ）なお、エクスプローラーのURL窓で`cmd`と打つと、そのパスでコマンドプロンプトを開けます。

####②Herokuにログイン

```sh
$ heroku login
```
ブラウザでHerokuのログイン画面にとぶので、そのままログイン

####③Herokuにデプロイ
Gitにコミット
※既にgit管理済みの場合は必要ありません
Herokuアプリ作成後に.git/configでURLにherokuが追加されているか確認してください

```sh
$ git init
$ git add .
$ git commit -m "Ready to deploy"
```

Heroku上にアプリを作成

```
$ heroku apps:create [プロジェクト名] 
```

コードをデプロイ

```
$ git push heroku master
```
これでHerokuアプリは起動しているはずです。Webページに飛びたい方は次のコマンドを。

```
$ heroku open
```

# DBの設定
HerokuでMysqlを使うためにはクレカの登録が必要のようです。
Account settingsのBillingから登録してください。
ちなみにCleardbは5MB以下なら無料です https://elements.heroku.com/addons/cleardb#ignite

登録したらDBを作成します。

```sh
$ heroku addons:add cleardb
```
Herokuの環境変数を確認

```sh
$ heroku config
```
文字化け対策で`CLEARDB_DATABASE_URL`の末尾を変更
ユーザー名やパスワードを変えたければその値も変更

```sh
$ heroku config:set CLEARDB_DATABASE_URL="mysql://ユーザー名:パスワード@DBのホスト:3306/データベース名?reconnect=true&characterEncoding=UTF-8&characterSetResults=UTF-8"
```

ここで確認した`CLEARDB_DATABASE_URL`の@以降の値をアプリのDB接続URLに指定してください
(`DBのホスト:3306/データベース名?reconnect=true&characterEncoding=UTF-8&characterSetResults=UTF-8`)


もろもろ設定したらHerokuにデプロイ

```
$ git add .
$ git commit -m "Change connection URL"
$ git push heroku master
```

# Herokuサーバーに一時ファイルを起きたい場合
アプリのアップロード機能などを作る際にローカルにファイルを一瞬置きたいときがあると思います。
その場合は`/tmp/`を指定してあげてください。


# 参考リンク
公式ドキュメント
https://devcenter.heroku.com/

Herokuを使って簡単にウェブページをインターネットで公開する方法
https://qiita.com/reoring/items/bca12aaa5f94b190a488

Heroku初心者がJavaで作成したWebアプリをGitHub連携でデプロイする時つまずいた4つのこと
https://qiita.com/ShandyGaffLover/items/0dad6ebf48d649aab761

herokuにlaravel5とMysqlの環境を整える
http://sizukutamago.hatenablog.com/entry/2016/10/21/heroku%E3%81%ABlaravel5%E3%81%A8Mysql%E3%81%AE%E7%92%B0%E5%A2%83%E3%82%92%E6%95%B4%E3%81%88%E3%82%8B

Heroku＋ClearDBで文字化けしていた件
https://omiend.hatenablog.jp/entry/2015/02/17/211134

herokuのサーバー上に一時ファイルを作ったこと
http://ncastar.hatenablog.com/entry/2016/01/20/001858