Open31

[InProgress] VS Code の Remote Container で Spring Boot ( gradle x Java ) の開発環境を構築する手順を整理する

やりたいこと(優先度順)

  1. Visual Studio Code の Remote Container を使用して Spring Boot の Application を作成する
  2. Remote Container を使用することで HostOS を汚さず環境構築する
  3. Spring Boot で アプリケーションを実装する
  4. gradle を使う
  5. kotlinを使う

Step

  • VS Code の基本構成を準備する
    • Docker で試す
    • docker-compose で試す
  • コンテナを準備する
    • application server
    • db server
  • Spring Boot の初期プロジェクトを作成する
    • java x maven
    • java x gradle
    • kotlin x maven ※未着手
    • kotlin x gradle ※失敗する
  • アプリケーションの基本的な設定
    • DB接続設定
  • PHP/Laravel のように migrationツール で migrate できるようにする

課題

  • 次の構成で実現しようとしたら実現出来なかった。
    • 構成
      • Visual Studio Code
      • Remote Container
      • Spring Boot ( gradle x kotlin )
    • 発生したエラー

中間成果物

参考

VS Code Remote - Containers を Docker Compose で使うのだー! - Mitsuyuki.Shiiba

これを参考にしながら構築する

起動しないなぁと思っていたら、 VS Code の Configuration の設定が VirtualBox で構築した Docker へ接続するようになってた。設定が Global 過ぎたので、より狭い範囲で設定しておくべきだった。

VS Code のコマンドパレットから作成すると以下の構成になる。

tree -a
.
└── .devcontainer
    └── devcontainer.json
    └── Dockerfile
.devcontainer/devcontainer.json
{
	"build": {
		"dockerfile": "Dockerfile",
	},
}

これを、今後を見越して以下の感じにする。

tree -a
.
├── .devcontainer
│   └── devcontainer.json
└── docker
    └── Dockerfile
.devcontainer/devcontainer.json
{
	"build": {
		"dockerfile": "../docker/Dockerfile",
	},
}

お試しで構築しようとしている コンテナ のベースイメージのバージョンは以下。

  • openjdk: 15
  • alpin: 3.12

pull コマンド

command
docker pull openjdk:15-jdk-alpine

掲載ページ。

openjdk Tags - Docker Hub

curl https://start.spring.io/starter.zip -d language=kotlin -d dependencies=web,mustache,jpa,h2,devtools -d packageName=com.example.blog -d name=Blog -o blog.zip -d type=gradle-project

Tutorial | Building web applications with Spring Boot and Kotlin

https://spring.io/guides/tutorials/spring-boot-kotlin/

pom だと Spring Boot Dashboard が Side Menu で出てくるけど、 gradle だと出てこないのはなんでなん

pom だと Spring Boot Dashboard が Side Menu で出てくるけど、 gradle だと出てこないのはなんでなん

起動タイミングの問題だった。
gradle でも対象コードまで行って Run すれば Side Menu が出てきた。

いまのところのベース構成

Command
$ tree -a
.
├── .devcontainer
│   └── devcontainer.json
└── docker
    ├── docker-compose.yml
    ├── mysql-confd
    │   └── default_authentication.cnf
    └── openjdk
        └── Dockerfile
.devcontainer/devcontainer.json
{
	"name": "My Java/Kotlin Application",

	"dockerComposeFile": "../docker/docker-compose.yml",
	"service": "openjdk",
	"workspaceFolder": "/workspace",
	"settings": {
	},

	"extensions": [
		// Language: Java / Kotlin
		"vscjava.vscode-java-pack",
		"redhat.java",
		"vscjava.vscode-java-debug",

		// Spring Boot
		"vscjava.vscode-spring-initializr",
		"pivotal.vscode-spring-boot",
		"pivotal.vscode-boot-dev-pack",
		"vscjava.vscode-spring-boot-dashboard"
	],
}
docker/docker-compose.yml
version: '3'
services:
  openjdk:
    build: ./openjdk
    ports:
      - "8080:8080"
    command: /bin/sh -c "while :; do sleep 10; done"
    volumes:
      - ..:/workspace:cached

  mysql:
    image: mysql:5.7
    container_name: "dc-db-mysql"
    restart: always
    environment:
      MYSQL_DATABASE: mysqldb
      MYSQL_ROOT_PASSWORD: mysqldb
    ports: 
      - 13306:3306
    volumes:
      - ./mysql-confd:/etc/mysql/conf.d
docker/openjdk/Dockerfile
ARG JDK_VERSION="15"
ARG ALPIN_VERSION="3.12"
FROM openjdk:${JDK_VERSION}-jdk-alpine${ALPIN_VERSION}

RUN apk update \
    && apk add git curl maven make mysql-client
docker/mysql-confd/default_authentication.cnf
[mysqld]
default_authentication_plugin= mysql_native_password

あとは、 vscode-spring-initializr で適当に Spring Boot プロジェクトを新規作成する。

TODO: Spring Boot に Migration Tool を導入する

[Unsolved] Kotlin で構築しようとしたときに Unresolved reference エラーが発生

Unresolved reference: SpringBootApplicationkotlin(UNRESOLVED_REFERENCE)

フレームワークや言語の全体像が分かっていないので解決方法が思い浮かばない。

[Solved] 予期せぬ Thymeleaf のエラーが発生する

※エラーログはメモし忘れた。

VS Code に gabrielbb.vscode-lombok の拡張機能を導入することでエラーが解決。

以下の記事関連だった。

VS Code で Java を書くときに Lombok が無くてエラーが出たとき - だだだだだだいありー

http://k6i.hateblo.jp/entry/2018/06/21/205657

Memo: Spring Boot の基本設定

Spring Boot の起動方法の変更

SpringBoot でポートを変更する - Qiita

https://qiita.com/hfh3oa/items/3552a51cf1d29a54c1f7

UseCase

  • Docker Container 上で複数の Spring Boot Applicaiton を起動させたい時に、起動Port が重複させないように設定する

Spring Boot Application を実装するための IDE

  • InteliJ IDEA
  • Spring Tool Suite
  • Eclipse + Spring Tools 4 for Eclipse
  • Visual Studio Code + Spring Tools 4 for Visual Studio Code
  • Theia + Spring Tools 4 for Theia
ログインするとコメントできます