> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ale.run/llms.txt
> Use this file to discover all available pages before exploring further.

# Spring Boot(JVM)

> Java / Kotlin 言語で作成された Spring Boot アプリケーションのデプロイガイドです。

***

## 事前準備

<AccordionGroup>
  <Accordion title="対応JDKバージョン">
    | Spring Boot バージョン | 対応JDKバージョン |
    | ----------------- | ---------- |
    | Spring Boot 3.x   | JDK 17 以上  |
    | Spring Boot 2.x   | JDK 8 以上   |
  </Accordion>
</AccordionGroup>

<Warning>
  プロジェクト設定ファイル(pom.xml, build.gradle など)の JDK バージョンがデプロイの過程で選択したバージョンと一致しない場合、ビルドが失敗する可能性があります。
</Warning>

<Tip>
  基本的にJAR形式のビルド成果物およびスクリプトをサポートしています。ただし、WARの場合はExecutable WARのみ対応しています。
</Tip>

## テンプレートとリポジトリの選択

<Frame>
  <img className="block rounded-md" src="https://files.cloudtype.io/ale-docs/developers/images/ja/springboot_02.png" />
</Frame>

> ダッシュボードの <Icon icon="circle-plus" iconType="solid" size={15} color="2396F1" />または `⌘ + K` で生成されるデプロイモーダルで Spring Boot テンプレートを選択し、続くドロップダウンメニューから連携されたGitHubアカウントのリポジトリを選択するか、[Git URLタブでGitリポジトリURLを入力してください。](/ja/developers/private-repo)

## デプロイ設定値を入力

> 次の各項目にサービスをデプロイするための設定値を入力してください。

<AccordionGroup>
  <Accordion title="基本項目">
    * **バージョン**
    * [環境変数](/ja/developers/env)
    * [ポート番号](/ja/developers/port)
    * **Start Command**
    * [Health Check](/ja/developers/zero-downtime-deployment)
  </Accordion>

  <Accordion title="詳細オプション">
    * **Build Variables**: コンテナイメージビルド時に含めるべき変数
    * **Embedded node.js**: プロジェクト内でビルドが必要な Node.js バージョン
    * **Pre-built jar file path**: 事前にビルドされリポジトリに登録済みの jar ファイルのパス
    * **Build Command**: gradle/maven ビルドコマンド
    * **Include files in build**: ビルド時に追加するファイルまたはディレクトリ
    * **Update strategy**
      * **Rolling Update** : 新バージョンデプロイ後、既存ポッド終了。可用リソース確保必要
      * **Recreate** : 既存ポッドを終了後、新バージョンを作成・起動。ダウンタイム発生
  </Accordion>
</AccordionGroup>

## リソース設定とデプロイ

<Frame>
  <img className="block rounded-md" src="https://files.cloudtype.io/ale-docs/developers/images/ja/08_04.png" />
</Frame>

* **リソースタイプ**：[オンデマンドとスポットリソース](/ja/developers/resource#on-demand-spot)から選択

* **CPU**：サービスで利用可能なvCPUの上限を設定。最小構成時は0.1 vCPUを割り当て

* **メモリ**：サービスで利用可能なメモリの上限を設定

* [レプリカ](/ja/developers/replica)：設定した数に応じサービスを水平スケーリングし、負荷分散と可用性確保

* **デプロイ**：`デプロイ`をクリック

<Info>
  デプロイが完了したらプレビュードメインを通じてブラウザでウェブページを確認したり、APIツールを使用してリクエストを送信できます。
</Info>

<Tip>
  リソース制限によりデプロイできない場合は、[スペースとリソースの管理ページ](/ja/operations/spaces#%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%AE%E4%BB%98%E4%B8%8E)を参照してスペースにリソースを追加してください。
</Tip>

## 高度な設定機能

### リポジトリ内Jarファイルデプロイ

* Spring Boot Jar ファイルをリポジトリに反映しデプロイする場合、デプロイ設定画面の **Pre-built jar file path** フィールドに各ビルドツールに合った jar ファイルのパスを入力してデプロイを進行します。
  * **Gradle**: `build/libs/[プロジェクト名].jar`
  * **Maven**: `target/[プロジェクト名].jar`

### ビルド時に特定リソースパスを含む

* エールで Spring Boot プロジェクトをデプロイする際、静的リソースの位置として `WebProperties.Resources` に定義された `/static` などを除き、`src` ディレクトリのファイルはビルド時に含まれません。 <br />
  プロジェクトで特定のパスのリソースを参照する場合、デプロイ設定時 **Include files in build** フィールドに該当ディレクトリパスを入力してデプロイします。
  区切り文字としてコンマ(`,`)を使用して複数のディレクトリを含めることができます。

### Multi Module Application デプロイ

* 複数のモジュールで構成される Spring Boot アプリケーションをデプロイする場合、いくつかの作業が必要です。
  以下の簡単な例を通じてデプロイ方法を参考にしてください。

  ```plain theme={null}
  project-root/
    ├── build.gradle.kts
    ├── settings.gradle.kts
    ├── api/
    │   ├── build.gradle.kts
    │   └── src/
    │       └── main/
    │           ├── kotlin/
    │           └── resources/
    ├── core/
    │   ├── build.gradle.kts
    │   └── src/
    │       └── main/
    │           ├── kotlin/
    │           └── resources/
    └── gradle/
        └── wrapper/
            ├── gradle-wrapper.jar
            └── gradle-wrapper.properties
  ```

  * `api`, `core` モジュールで構成し `api` を main class に指定

  <Figure className="mt-5 mb-4" src="https://files.cloudtype.io/ale-docs/quickstart/springboot/deployment-3.png" size="3xl" />

  <Figure className="mt-5 mb-12" src="https://files.cloudtype.io/ale-docs/quickstart/springboot/deployment-4.png" size="3xl" />

  * Spring Boot テンプレートを選択した後、次の設定を適用
    * **Start command**: `java -jar api/build/libs/api-0.0.1-SNAPSHOT.jar`
      * `java -jar` の引数として `<main モジュール名>/build/libs/<main モジュール名>-0.0.1-SNAPSHOT.jar`
    * **Include files in build**: `core,api`
      * モジュールのディレクトリ名をコンマで区切って入力

***

[Spring Boot Docs](https://docs.spring.io/spring-boot/docs/current/reference/html/index.html)
