以前以下の記事で、SpringBoot2.7系の場合の実装方法についてまとめた。
SpringBoot3.X系の場合、一部実装方法に違いがあるので、再度実装方法についてまとめる。
今回はTriggerによらない共通実装部分について記載する。
必要なツールのインストール
Node.js(Windows 64bit版 LTS v20.14.0)
以下のサイトからインストール。
https://nodejs.org/ja/download/
Azure Functions Core Tools
npm i -g azure-functions-core-tools@3 --unsafe-perm true
プロジェクト作成
今回は、Git上に公開されているプロジェクトを使用するのではなく、
Spring InitializrでSpringBoot3.X系のブランクプロジェクトの作成を行う。
上記リンクにアクセスすると、下記のようなページが表示されるので、SpringBoot3.X系であることと、Gradleプロジェクトであることを確認し、
「Project Metadata」のところに任意のプロジェクト情報を入力して「Generate」ボタンを押下する。
Zipファイルがダウンロードされるので解凍する。
build.gradle編集
Spring Initializrでダウンロードしたプロジェクトのbuild.gradleを開いて、大体以下の感じであることを確認する。
※依存関係の細かいバージョンだったり、グループIDとかは任意のものでOK
plugins { id 'java' id 'eclipse' // Spring Boot は3.X系を使用 id 'org.springframework.boot' version '3.2.1' id 'io.spring.dependency-management' version '1.1.4' } group = 'jp.co.sample' version = '1.0.0-SNAPSHOT' // Java17 java { sourceCompatibility = '17' targetCompatibility = '17' } // Lombokのアノテーションの有効化 configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { // Spring implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' // Lombok compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' } // Junit有効化 tasks.named('test') { useJUnitPlatform() }
依存関係の追加
build.gradleにAzureFunctionsをSpringBootで実装するために必要な依存関係を追加する。
- spring-cloud-function-adapter-azure
- spring-cloud-starter-function-web
SpringBoot3.X系の場合、これらの依存関係は4.X系のバージョンを適用する。
最新のバージョンの確認や、Gradle定義のコピーは以下のページからそれぞれ行う。
dependencies { // Spring implementation 'org.springframework.boot:spring-boot-starter-web' // ↓追加 implementation 'org.springframework.cloud:spring-cloud-function-adapter-azure:4.1.0' compileOnly 'org.springframework.cloud:spring-cloud-starter-function-web:4.1.0' // ↑追加 testImplementation 'org.springframework.boot:spring-boot-starter-test' // Lombok compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' }
jarファイル作成時の設定追加
SpringBootプロジェクトでは、ビルド時にプロジェクトが依存しているモジュールも内包した実行可能jarファイルと、
プレーンなjarファイルの2種類のjarファイルが生成され、それぞれファイル名は以下のようになっている。
- 実行可能jarファイル:{プロジェクト名}-{バージョン}.jar
- プレーンなjarファイル:{プロジェクト名}-{バージョン}-plain.jar
例えばプロジェクト名が「func」、バージョンが「1.0.0」の場合、それぞれ下記の名称でjarファイルが生成される。
- 実行可能jarファイル:func-1.0.0.jar
- プレーンなjarファイル:func-1.0.0-plain.jar
AzureFunctionsを起動する際に使用するのは、プレーンなjarファイルの方であり、
かつファイル名が「{プロジェクト名}-{バージョン}.jar
」でないと正しく読み込めないため、
適切なjarファイルが生成されるようにbuild.gradleに設定を追加する。
// ↓追加 jar { // プレーンなjarファイルを作成する enabled = true // jarファイル名に識別子を付けない(デフォルト「plain」がつくようになっている) archiveClassifier = '' // mainメソッドが存在するクラスの完全修飾子を指定 manifest { attributes 'Main-Class' : 'jp.co.sample.functions.FunctionsApplication' } } // ↑追加
プラグイン追加
Azure Functions Pluginを追加する。
このプラグインを追加することで、Functionsのパッケージング、ローカル環境でのFunctionsの起動・デバッグが行えるようになる。
plugins { id 'java' id 'eclipse' id 'org.springframework.boot' version '3.2.1' id 'io.spring.dependency-management' version '1.1.4' // ↓追加 id 'com.microsoft.azure.azurefunctions' version '1.14.0' // ↑追加 } // ↓追加 azurefunctions { // Azure上関数アプリが属しているリソースグループ名 resourceGroup = "sample-func" // 関数アプリ名 appName = "java-sample" appSettings { WEBSITE_RUN_FROM_PACKAGE = '1' FUNCTIONS_EXTENSION_VERSION = '~3' FUNCTIONS_WORKER_RUNTIME = 'java' MAIN_CLASS = 'jp.co.sample.functions.FunctionsApplication' } authentication { type = 'azure_cli' } // ローカルでデバッグする際はlocalDebugを有効化する // localDebug = "transport=dt_socket,server=y,suspend=n,address=5005" deployment { type = 'run_from_blob' } } // ↑追加
ここまでで、AzureFunctionsを実装するために必要となるプロジェクトの設定が完了となる。
次回以降はTriggerごとの実装方法の説明をしていく。