Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini memperlihatkan kepada Anda cara membuat, menguji, men-debug, dan menyebarkan Java Spring Cloud Function di Azure Functions. Setelah selesai, fungsi Anda berjalan pada Paket Konsumsi dan merespons permintaan HTTP.
Prasyarat
- Langganan Azure. Jika Anda tidak memiliki langganan Azure, buatlah akun gratis sebelum Anda memulai.
Untuk mengembangkan fungsi menggunakan Java, instal alat berikut:
- Java Developer Kit, versi 11
- Apache Maven, versi 3.0 atau yang lebih tinggi
- Azure CLI
- Azure Functions Core Tools versi 4
Penting
Atur variabel lingkungan JAVA_HOME ke lokasi instalasi JDK untuk menyelesaikan panduan memulai cepat ini.
Pastikan versi alat inti Anda setidaknya 4.0.5455.
Apa yang akan Anda bangun
Anda akan membangun fungsi klasik "Hello, World" yang berjalan pada Azure Functions dan dikonfigurasi dengan Spring Cloud Function.
Fungsi menerima User objek JSON, yang berisi nama pengguna, dan mengirim kembali Greeting objek, yang berisi pesan selamat datang untuk pengguna tersebut.
Proyek ini tersedia di sampel Spring Cloud Function di Azure dari azure-function-java-worker repositori di GitHub. Anda bisa menggunakan sampel tersebut secara langsung jika Anda ingin melihat hasil akhir yang dijelaskan dalam panduan singkat ini.
Membuat proyek Maven baru
Buat proyek Maven kosong dan konfigurasikan dengan Spring Cloud Function dan Azure Functions.
Di folder kosong, buat file pom.xml baru. Kemudian, salin konten dari file pom.xml proyek sampel.
Catatan
File ini menggunakan dependensi Maven dari Spring Boot dan Spring Cloud Function. Ini juga mengonfigurasi plugin Spring Boot dan Azure Functions Maven.
Kustomisasi beberapa properti untuk aplikasi Anda:
-
<functionAppName>adalah nama Fungsi Azure Anda. -
<functionAppRegion>adalah nama wilayah Azure tempat Anda menyebarkan Fungsi Anda. -
<functionResourceGroup>adalah nama grup sumber daya Azure yang Anda gunakan.
Ubah properti tersebut langsung di dekat bagian atas file pom.xml, seperti yang ditunjukkan pada contoh berikut:
<properties>
<java.version>11</java.version>
<!-- Spring Boot start class. WARNING: correct class must be set -->
<start-class>com.example.DemoApplication</start-class>
<!-- customize those properties. WARNING: the functionAppName should be unique across Azure -->
<azure.functions.maven.plugin.version>1.36.0</azure.functions.maven.plugin.version>
<functionResourceGroup>my-spring-function-resource-group</functionResourceGroup>
<functionAppServicePlanName>my-spring-function-service-plan</functionAppServicePlanName>
<functionAppName>my-spring-function</functionAppName>
<functionPricingTier>Y1</functionPricingTier>
<functionAppRegion>eastus</functionAppRegion>
</properties>
Membuat file konfigurasi Azure
Buat folder src/main/resources dan tambahkan file konfigurasi Azure Functions berikut ke dalamnya.
host.json:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.2.0)"
},
"functionTimeout": "00:10:00"
}
local.settings.json:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"FUNCTIONS_WORKER_RUNTIME": "java",
"FUNCTIONS_EXTENSION_VERSION": "~4",
"AzureWebJobsDashboard": ""
}
}
Membuat objek domain
Azure Functions dapat menerima dan mengirim objek dalam format JSON.
Buat User objek dan Greeting yang mewakili model domain Anda.
Anda dapat membuat objek yang lebih kompleks dengan lebih banyak properti jika ingin menyesuaikan panduan singkat ini.
Buat folder src/main/java/com/example/model dan tambahkan dua file berikut:
User.java:
package com.example.model;
public class User {
private String name;
public User() {
}
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Greeting.java:
package com.example.model;
public class Greeting {
private String message;
public Greeting() {
}
public Greeting(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
Membuat aplikasi Spring Boot
Aplikasi ini mengelola semua logika bisnis dan memiliki akses ke ekosistem Spring Boot penuh. Kemampuan ini memberi Anda dua manfaat utama dibandingkan fungsi Azure standar:
- Ia tidak bergantung pada API Azure Functions, sehingga Anda dapat dengan mudah memindahkannya ke sistem lain. Misalnya, Anda dapat menggunakannya kembali dalam aplikasi Spring Boot normal.
- Anda dapat menggunakan semua anotasi
@Enabledari Spring Boot untuk menambahkan fitur baru.
Di folder src/main/java/com/example, buat file berikut, yang merupakan aplikasi Spring Boot normal:
DemoApplication.java:
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(DemoApplication.class, args);
}
}
Sekarang buat file berikut di folder src/main/java/com/example/hello . Kode ini berisi komponen Spring Boot yang mewakili Fungsi yang ingin Anda jalankan:
Hello.java:
package com.example.hello;
import com.example.model.*;
import org.springframework.stereotype.Component;
import java.util.function.Function;
@Component
public class Hello implements Function<User, Greeting> {
@Override
public Greeting apply(User user) {
return new Greeting("Hello, " + user.getName() + "!\n");
}
}
Catatan
Fungsi Hello cukup spesifik:
- Ini adalah
java.util.function.Function. Fungsi ini berisi logika bisnis, dan menggunakan API Java standar untuk mengubah satu objek menjadi objek lain. - Karena memiliki anotasi
@Component, ini merupakan Spring Bean. Secara default, namanya sama dengan kelas , tetapi dimulai dengan karakter huruf kecil:hello. Jika ingin membuat fungsi lain dalam aplikasi, Anda perlu mengikuti konvensi penamaan ini. Nama harus cocok dengan nama Azure Functions yang Anda buat di bagian berikutnya.
Membuat Fungsi Azure
Untuk menggunakan API Azure Functions lengkap, buat Fungsi Azure yang mendelegasikan eksekusinya ke Spring Cloud Function yang Anda buat di langkah sebelumnya.
Di folder src/main/java/com/example/hello, buat file kelas Azure Function berikut:
HelloHandler.java:
package com.example.hello;
import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.HttpTrigger;
import com.example.model.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Optional;
@Component
public class HelloHandler {
@Autowired
private Hello hello;
@FunctionName("hello")
public HttpResponseMessage execute(
@HttpTrigger(name = "request", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<User>> request, ExecutionContext context) {
User user = request.getBody()
.filter(u -> u.getName() != null)
.orElseGet(() -> new User(request.getQueryParameters().getOrDefault("name", "world")));
context.getLogger().info("Greeting user name: " + user.getName());
return request.createResponseBuilder(HttpStatus.OK)
.body(hello.apply(user))
.header("Content-Type", "application/json")
.build();
}
}
Kelas Java ini adalah Fungsi Azure dengan fitur berikut:
- Kelas ini memiliki anotasi
@Component, sehingga merupakan Spring Bean. - Nama fungsi, seperti yang didefinisikan oleh anotasi
@FunctionName("hello"), adalahhello. - Kelas ini mengimplementasikan Azure Function nyata, sehingga Anda dapat menggunakan Api Azure Functions lengkap di sini.
Tambahkan pengujian unit
Langkah ini opsional tetapi disarankan untuk memvalidasi bahwa aplikasi berfungsi dengan benar.
Buat folder src/test/java/com/example dan tambahkan pengujian JUnit berikut:
HelloTest.java:
package com.example;
import com.example.hello.Hello;
import com.example.model.Greeting;
import com.example.model.User;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class HelloTest {
@Test
public void test() {
Greeting result = new Hello().apply(new User("foo"));
assertThat(result.getMessage()).isEqualTo("Hello, foo!\n");
}
}
Sekarang Anda dapat menguji Fungsi Azure anda dengan menggunakan Maven:
mvn clean test
Menjalankan Fungsi secara lokal
Sebelum Anda menyebarkan aplikasi untuk Azure Function, uji secara lokal.
Pertama, kemas aplikasi Anda ke dalam file JAR:
mvn package
Sekarang setelah aplikasi di kemas, jalankan dengan menggunakan azure-functions plugin Maven:
mvn azure-functions:run
Fungsi Azure sekarang tersedia di localhost Anda, menggunakan port 7071. Uji fungsi dengan mengirimkannya permintaan POST, dengan User objek dalam format JSON. Misalnya, gunakan cURL:
curl -X POST http://localhost:7071/api/hello -d "{\"name\":\"Azure\"}"
Fungsi merespons dengan Greeting objek, dalam format JSON:
{
"message": "Hello, Azure!\n"
}
Berikut adalah cuplikan layar permintaan cURL di bagian atas layar, dan Fungsi Azure lokal di bagian bawah:
Debug Fungsi secara lokal
Bagian berikut menjelaskan cara melakukan debug fungsi.
Debug menggunakan Intellij IDEA
Buka proyek di IntelliJ IDEA, lalu buat konfigurasi eksekusi Debug JVM Jarak Jauh untuk dilampirkan. Untuk informasi selengkapnya, lihat Tutorial: Debug jarak jauh.
Jalankan aplikasi menggunakan perintah berikut:
mvn azure-functions:run -DenableDebug
Saat aplikasi dimulai, Anda akan melihat output berikut:
Worker process started and initialized.
Listening for transport dt_socket at address: 5005
Mulai penelusuran kesalahan proyek di IntelliJ IDEA. Anda akan melihat output berikut:
Connected to the target VM, address: 'localhost:5005', transport: 'socket'
Tandai titik henti yang ingin Anda debug. IntelliJ IDEA memasuki mode debug setelah mengirim permintaan.
Debug menggunakan Visual Studio Code
Buka proyek di Visual Studio Code, lalu konfigurasikan konten file launch.json berikut:
{
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Attach to Remote Program",
"request": "attach",
"hostName": "127.0.0.1",
"port": 5005
}
]
}
Jalankan aplikasi menggunakan perintah berikut:
mvn azure-functions:run -DenableDebug
Saat aplikasi dimulai, Anda akan melihat output berikut:
Worker process started and initialized.
Listening for transport dt_socket at address: 5005
Mulai debugging proyek di Visual Studio Code, lalu tandai breakpoint yang ingin digunakan untuk debugging. Visual Studio Code memasuki mode debug setelah permintaan dikirim. Untuk informasi selengkapnya, lihat Menjalankan dan debug Java.
Menyebarkan Fungsi ke Azure Functions
Sekarang, Anda akan menerbitkan Fungsi Azure ke lingkungan produksi. Ingatlah bahwa <functionAppName>, <functionAppRegion>, dan <functionResourceGroup> properti yang telah Anda tentukan dalam pom.xml file Anda digunakan untuk mengonfigurasi fungsi Anda.
Catatan
Plugin Maven perlu melakukan autentikasi dengan Azure. Jika Anda telah memasang Azure CLI, gunakan az login sebelum melanjutkan.
Untuk opsi autentikasi lainnya, lihat Autentikasi di azure-maven-plugins repositori.
Jalankan Maven untuk menyebarkan fungsi Anda secara otomatis:
mvn azure-functions:deploy
Sekarang buka portal Azure untuk menemukan Function App yang telah dibuat.
Pilih fungsi:
- Dalam gambaran umum fungsi, perhatikan URL fungsi.
- Untuk memeriksa fungsi yang sedang berjalan, pilih Streaming log pada menu navigasi.
Sekarang, seperti yang Anda lakukan di bagian sebelumnya, gunakan cURL untuk mengakses fungsi berjalan, seperti yang ditunjukkan pada contoh berikut. Pastikan untuk mengganti your-function-name dengan nama fungsi asli Anda.
curl https://your-function-name.azurewebsites.net/api/hello -d "{\"name\":\"Azure\"}"
Seperti di bagian sebelumnya, Fungsi harus menjawab Anda dengan objek Greeting, masih dalam format JSON:
{
"message": "Hello, Azure!\n"
}
Selamat, Anda memiliki Fungsi Spring Cloud yang berjalan di Azure Functions! Untuk informasi selengkapnya dan sampel fungsi Spring Cloud, lihat sumber daya berikut:
Langkah berikutnya
Untuk mempelajari selengkapnya tentang Spring dan Azure, lanjutkan ke pusat dokumentasi Spring di Azure.