きり丸の技術日記

技術検証したり、資格等をここに残していきます。

GitpodでDBのDockerを使用し、SpringBootからアクセスする

きり丸アドベントカレンダー2020の4記事目です。


Gitpod上でDBの環境構築もできると、確認できることが増えます。DBも設定しましょう。

手順

.gitpod.Dockerfileを修正


gp initで作成したDockerのイメージにはPostgreSQLは含まれていません。ですので、.gitpod.DockerfileのFROMを次に書き換える必要があります。

FROM gitpod/workspace-postgres

ワークスペースのリセット


.gitpod.Dockerfileの修正を反映するためには、ワークスペースをリセットする必要があります。

アドベントカレンダー1日目でもリセットしているので、手順は同じです。

ちなみに、これですでにPostgreSQLが使える状態になりました。Dockerイメージの中身に、PostgreSQLの起動も含まれていますので、明示的に起動させる必要もありません。

また、ワークスペースを破棄しない限りは、DBは永続化されているようです。

以降はアドベントカレンダー用の記載

build.gradleのコメントを外す


3日目の記事では、DBの設定のせいで起動できませんでしたのでコメントにしました。そのコメントを外します。この段階で./gradlew bootRunを実行すると失敗することを確認してみてください。

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.flywaydb:flyway-core'
    implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.4'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'com.h2database:h2'
    runtimeOnly 'org.postgresql:postgresql'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

ディレクトリ構造をFlywayのデフォルト設定に従う


Flywayは下記ディレクトリ構造をもつ必要があります。

src/main/resources/db/migration

ディレクトリ構造だけをGitHubにpushするのは面倒くさいので、いったん適当なテーブルを作成するSQLを配備しましょう。

src/main/resources/db/migration/R__test.sql

CREATE TABLE TODOS(
    id int,
    user_id varchar
);

SpringBootから接続する


まずは、設定ファイルをプロパティから、YAMLに変更します。

src/main/resources/application.propertiessrc/main/resources/application.ymlにリネームするだけで大丈夫です。

その後、設定ファイルに下記を追記してください。

spring:
  datasource: 
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://127.0.0.1:5432/postgres
    username: gitpod
    password: 

これらを設定した後、./gradlew bootRunを行うと、SpringBoot起動時に用意したSQLを実行します。

PostgreSQLに書き込まれていることの確認


まだJavaソース上で読み書きを行うロジックを書いていないので、Javaからは確認できません。今の段階では、psqlで確認する必要があります。

下記コマンドで、psqlへの接続を行います。

psql -h localhost -d postgres

psqlで接続したのち、用意したTODOSテーブルが存在することを確認してください。

SELECT * FROM todos;

もし、目的のテーブルが存在している場合は成功です。

ソースコード

アドベントカレンダー4日目。 github.com

終わりに

Gitpodだけでなく、SpringのDB接続も記載しているのでタイトルとは異なる内容が後半に記載されています。分けることも考えましたが、すでにアドベントカレンダー上では4日目であり、かなり牛歩な環境構築なので1記事にまとめました。

次回はこの段階でHerokuにアップロードします。アプリケーションの中身は作っていないのですが、この仕事の進め方は今後の参考になるはずですので、ぜひついてきてToDoアプリケーションを作っていただけるとうれしいです。


この記事がお役に立ちましたら、各種SNSでのシェアや、今後も情報発信しますのでフォローよろしくお願いします。

参考記事

Gitpod公式 www.gitpod.io

類似記事

きり丸アドベントカレンダー2020 adventar.org

5日目のアドベントカレンダーの記事 https://nainaistar.hatenablog.com/entry/2020/12/05/083000nainaistar.hatenablog.com

f:id:nainaistar:20201013111905p:plain