【Heroku 1】Spring Boot + PostgreSQLのアプリをHerokuにデプロイするまで

   

ちょっとしたアプリを作る必要があって何を使おうかなと思っていたのですが、さんざんやってきたSalesforceのデータとの同期とかも将来的にはやるだろうな〜と考えたらHerokuという選択肢を外すことが出来ず(Heroku connectが使いたい)、せっかくだしやってみようかなという事でスタートしてみた訳です。

ということでこちらについては物凄く初心者(Heroku,PostgreSQL,Javaアプリ触ったこと無い)の記録ですので、おかしな所などありましたら是非指摘をお願いします。

開発環境

OS: Mac OS X
IDE: Eclipse

まずはやってみるということで参考ページ

http://dev.classmethod.jp/server-side/java/using_spring_boot_1/

準備内容について

上記ページを参考にして幾つかMarketplaceからインストールすればOK。

STSから起動する

https://spring.io/tools/sts

このページからSTSのアプリをダウンロードして起動すると、STS仕様のeclipseが立ち上がる。(という理解で良いのかな)

参考:http://libro.tuyano.com/index3?id=7576003

HelloWorldプロジェクトを作成してSpringBootを起動する

参考:https://devcenter.heroku.com/articles/deploying-spring-boot-apps-to-heroku

基本的にはここに書いてあるとおりに進めていけば簡単。

spring init --dependencies=web myapp

webアプリを作りたいのでdependenciesを指定。myappという部分は任意なので自分の名前に置き換えてOK。

これを作ると、eclipse側にファイルが表示されていると思う。

src/main/java/demo/自分の付けた名前.java

というファイルがあるので、そいつを編集する。(eclipseで)

DemoApplicationって書いてある部分は自分でつけた名前に置き換える(2箇所)

package demo; //←これは恐らく最初から入ってると思うので全く同じじゃなければ元ファイルを残してこの行は不要

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.*;
import org.springframework.stereotype.*;

@Controller
@SpringBootApplication
public class DemoApplication {

@RequestMapping("/")
 @ResponseBody
 String home() {
 return "Hello World!";
 }

public static void main(String[] args) {
 SpringApplication.run(DemoApplication.class, args);
 }
}

Herokuに登録する

gitを初期化して、Heroku側にアプリを登録し、そちらにファイルをpushする。書いてある通りでOK。

ここではデータベースの設定がしてあれば heroku addonsというコマンドで情報が取れるよと書いてあるが、まっさらなアプリにそんな設定はしていないので設定をしてみる。

PostgreSQLの設定をする

アプリのダウンロードと起動:http://postgresapp.com/

DBの作成等はこちらを参照:http://dev.classmethod.jp/server-side/java/using_spring_boot_2/

データベースの作成とデータのinsertはコマンドラインで上記URLに書いてあるとおりにまずは入れてしまう。

PostgreSQLを使うにはbuild.gradleのdependenciesに追記が必要

compile('org.springframework.boot:spring-boot-starter-data-jpa')
runtime('org.postgresql:postgresql')

こちらを加えておきましょう。

これだけじゃ設定が更新されないので、eclipseのPackage Explorerでプロジェクト名をctrl +クリックしてメニューを呼び出し、Gradele(STS) > Refresh ALL(もしくは⌘ + F5)で設定を再読込しておきます。

作るのはapplication.xmlではなくてapplication.yml

spring:
datasource:
url: jdbc:postgresql://localhost/sbdb
username: XXXX
password: XXXX
driverClassName: org.postgresql.Driver

は、application.ymlです。xmlだと読み込んでくれずにエラーがでます。

src/main/resourcesの下に configフォルダを作ってその中に File > New > Fileでファイルを作成します。

username とパスワードは PostgreSQLの設定の時に使ったものを使ってください。

/localhost/sbdb

って書いてある部分ですが、sbdbはデータベース名ですので、変更した場合はこちらも書き換える必要があります。

コードを追加する部分について

DBApplicationといきなり書いてあるので何して良いのかわからなかったのですが、要はclassファイルを作りなさいよということでした。

src/main/javaの下にあるパッケージ名をクリックして File>New>Classでクラスのファイルを作るのです。

全部作りましょう。DBApplicationだけは要らないです。プロジェクトを作った時にプロジェクト名で自動的に追加されていると思います。

ファイルを作ったらローカルでまずは接続してみます。

http://localhost:8080/counter/selectall

jsonが表示されたでしょうか?問題なさそうであればHerokuにpushするための準備をします。

PostgreSQLをHerokuのアプリに接続する

HerokuにpushしてもPostgreSQLが無いのでうまく動きません。なのでSQLを稼働させましょう。

Herokuの管理画面にログインし、アプリをクリックしてResorucesタブを開きます。

Add-onsの検索タブにPostgresと入れると出てきますので、そちらを選択。ひとまずHobby Devで良いでしょう。これでアプリにPostgresSQLをリンクすることが出来ました。

Add-onsに追加すると、コマンドラインツールで接続することが出来ます。

$ heroku pg:psql

もしくは

$heroku pg:psql --app アプリ名

で接続。

開発環境と同様にデータを投入します(最初の行の CREATE DATABASE sbdb; はデータベースの作成コマンドですので不要です)

CREATE TABLE counter1 (
id SERIAL PRIMARY KEY
, title VARCHAR(16)
, count INT);
 
INSERT INTO counter1 VALUES
 (0,'all',0)
 , (1,'select',0)
 , (2,'update',0)
 , (3,'delete',0);

コードを再度pushしましょう

gitの使い方もよく分かってないのでこれでいいのか感はありますが、ひとまず全部のファイルを追加します 参考:http://qiita.com/konweb/items/621722f67fdd8f86a017

$ git add .
$ git commit -a -m "任意のコメント"
$ git push heroku master

これが出来たら、アップされたURLにアクセスしましょう

https://<アプリ名>.herokuapp.com/counter/selectall

JSONが返ってくれば完成です。

おすすめ記事一覧

 - Heroku, SpringBoot