Události
Vytváření inteligentních aplikací
17. 3. 21 - 21. 3. 10
Připojte se k řadě meetupů a vytvořte škálovatelná řešení AI založená na skutečných případech použití s kolegy vývojáři a odborníky.
ZaregistrovatTento prohlížeč se už nepodporuje.
Upgradujte na Microsoft Edge, abyste mohli využívat nejnovější funkce, aktualizace zabezpečení a technickou podporu.
Tento článek popisuje použití funkcí Spring Cloud k vývoji funkce Java a jejímu publikování ve službě Azure Functions. Až budete hotovi, kód funkce poběží v plánu Consumption v Azure a je možné ho aktivovat prostřednictvím požadavku HTTP.
K vývoji funkcí pomocí Javy musíte mít nainstalovaný následující software:
Důležité
JAVA_HOME
je nutné nastavit proměnnou prostředí na umístění instalace sady JDK.Vytvoříme klasickou funkci Hello, World, která běží ve službě Azure Functions a je nakonfigurovaná pomocí funkce Spring Cloud.
Funkce obdrží User
objekt JSON, který obsahuje uživatelské jméno, a odešle zpět Greeting
objekt, který obsahuje uvítací zprávu pro daného uživatele.
Projekt je k dispozici ve funkci Spring Cloud v Azure v ukázce úložiště azure-function-java-worker na GitHubu. Tuto ukázku můžete použít přímo, pokud chcete vidět konečnou práci popsanou v tomto rychlém startu.
Vytvoříme prázdný projekt Maven a nakonfigurujeme ho pomocí funkce Spring Cloud a Azure Functions.
V prázdné složce vytvořte nový soubor pom.xml a zkopírujte nebo vložte obsah ze souboru pom.xml ukázkového projektu.
Poznámka
Tento soubor použije závislosti Maven z funkcí Spring Boot a Spring Cloud a nakonfiguruje moduly plug-in Maven Spring Boot a Azure Functions.
Potřebujete přizpůsobit několik vlastností pro vaši aplikaci:
<functionAppName>
je název funkce Azure Functions.<functionAppRegion>
je název oblasti Azure, ve které je vaše funkce nasazena.<functionResourceGroup>
je název skupiny prostředků Azure, kterou používáte.Změňte tyto vlastnosti přímo v horní části souboru pom.xml , jak je znázorněno v následujícím příkladu:
<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>
Vytvořte složku src/main/resources a přidejte do ní následující konfigurační soubory Azure Functions.
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": ""
}
}
Azure Functions může přijímat a odesílat objekty ve formátu JSON.
Teď vytvoříme naše User
objekty a Greeting
objekty, které představují náš doménový model.
Pokud si chcete přizpůsobit tento rychlý start, aby byl pro vás zajímavější, můžete vytvořit složitější objekty s více vlastnostmi.
Vytvořte složku src/main/java/com/example/model a přidejte do ní následující dva soubory:
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;
}
}
Tato aplikace spravuje veškerou obchodní logiku a má přístup k celému ekosystému Spring Boot. Tato funkce poskytuje dvě hlavní výhody oproti standardní funkci Azure Functions:
@Enable
poznámky z Spring Bootu.Ve složce src/main/java/com/example vytvořte následující soubor, což je normální aplikace Spring Boot:
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);
}
}
Teď ve složce src/main/java/com/example/hello vytvořte následující soubor. Tento kód obsahuje komponentu Spring Boot, která představuje funkci, kterou chceme spustit:
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");
}
}
Poznámka
Funkce Hello
je poměrně specifická:
java.util.function.Function
Obsahuje obchodní logiku a používá standardní rozhraní Java API k transformaci jednoho objektu do druhého.@Component
, je to Spring Bean a ve výchozím nastavení je jeho název stejný jako třída, ale začíná malými písmeny: hello
. Pokud chcete ve své aplikaci vytvořit další funkce, je důležité tomuto konvenci vytváření názvů. Název se musí shodovat s názvem Azure Functions, který vytvoříme v další části.Abychom mohli využívat úplné rozhraní API služby Azure Functions, teď kódujeme funkci Azure Functions, která deleguje její spuštění na funkci Spring Cloud vytvořenou v předchozím kroku.
Ve složce src/main/java/com/example/hello vytvořte následující soubor třídy funkce Azure Functions:
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();
}
}
Tato třída Java představuje funkci Azure Functions a má následující zajímavé funkce:
@Component
, takže je to Spring Bean.@FunctionName("hello")
, je hello
.Tento krok je nepovinný, ale doporučuje se ověřit, že aplikace funguje správně.
Vytvořte složku src/test/java/com/example a přidejte následující testy JUnit:
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");
}
}
Nyní můžete funkci Azure Functions otestovat pomocí Mavenu:
mvn clean test
Než aplikaci nasadíme do Azure Functions, otestujeme ji místně.
Nejprve je třeba zabalit aplikaci do souboru Jar:
mvn package
Když je aplikace zabalená, můžete ji spustit pomocí modulu plug-in azure-functions
v Mavenu:
mvn azure-functions:run
Funkce Azure Functions by nyní měla být dostupná na localhostu přes port 7071. Funkci můžete otestovat tak, že jí odešlete požadavek POST s objektem User
ve formátu JSON. Například pomocí cURL:
curl -X POST http://localhost:7071/api/hello -d "{\"name\":\"Azure\"}"
Funkce by měla jako odpověď poslat objekt Greeting
ve formátu JSON:
{
"message": "Hello, Azure!\n"
}
Tady je snímek obrazovky s požadavkem cURL v horní části obrazovky a místní funkcí Azure v dolní části:
Následující části popisují, jak funkci ladit.
Otevřete projekt v Intellij IDEA a pak vytvořte konfiguraci spuštění vzdáleného ladění JVM pro připojení. Další informace naleznete v tématu Kurz: Vzdálené ladění.
Spusťte aplikaci pomocí následujícího příkazu:
mvn azure-functions:run -DenableDebug
Po spuštění aplikace se zobrazí následující výstup:
Worker process started and initialized.
Listening for transport dt_socket at address: 5005
Spusťte ladění projektu v IntelliJ IDEA. Zobrazí se následující výstup:
Connected to the target VM, address: 'localhost:5005', transport: 'socket'
Označte zarážky, které chcete ladit. Intellij IDEA přejde po odeslání požadavku do režimu ladění.
Otevřete projekt v editoru Visual Studio Code a nakonfigurujte následující obsah souboru launch.json :
{
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Attach to Remote Program",
"request": "attach",
"hostName": "127.0.0.1",
"port": 5005
}
]
}
Spusťte aplikaci pomocí následujícího příkazu:
mvn azure-functions:run -DenableDebug
Po spuštění aplikace se zobrazí následující výstup:
Worker process started and initialized.
Listening for transport dt_socket at address: 5005
Spusťte ladění projektu v editoru Visual Studio Code a potom označte zarážky, které chcete ladit. Visual Studio Code po odeslání požadavku přejde do režimu ladění. Další informace najdete v tématu Spuštění a ladění Javy.
Teď publikujete funkci Azure Functions do produkčního prostředí. Nezapomeňte, že ke <functionAppName>
konfiguraci funkce se používají vlastnosti a <functionAppRegion>
vlastnosti, <functionResourceGroup>
které jste definovali v souboru pom.xml.
Poznámka
Modul plug-in Maven se musí ověřit v Azure. Pokud máte nainstalované Rozhraní příkazového řádku Azure, použijte az login
před pokračováním.
Další možnosti ověřování najdete v tématu Ověřování v úložišti azure-maven-plugins .
Spusťte Maven a nasaďte funkci automaticky:
mvn azure-functions:deploy
Nyní přejděte na web Azure Portal a vyhledejte vytvořenou aplikaci Function App
.
Vyberte funkci:
Jak jste to udělali v předchozí části, použijte cURL pro přístup ke spuštěné funkci, jak je znázorněno v následujícím příkladu. Nezapomeňte nahradit your-function-name
názvem skutečné funkce.
curl https://your-function-name.azurewebsites.net/api/hello -d "{\"name\":\"Azure\"}"
Stejně jako v předchozí části by funkce měla jako odpověď poslat objekt Greeting
ve formátu JSON:
{
"message": "Hello, Azure!\n"
}
Blahopřejeme, vaše funkce Spring Cloud běží v Azure Functions! Další informace a ukázky funkcí Spring Cloud najdete v následujících zdrojích informací:
Pokud se chcete dozvědět více o architektuře Spring a Azure, přejděte do centra dokumentace Spring v Azure.
Události
Vytváření inteligentních aplikací
17. 3. 21 - 21. 3. 10
Připojte se k řadě meetupů a vytvořte škálovatelná řešení AI založená na skutečných případech použití s kolegy vývojáři a odborníky.
ZaregistrovatŠkolení
Modul
Deploy a Spring Boot app to Azure Container Apps - Training
In this module, you learn how to deploy a Spring Boot app to Azure Container Apps. You deploy a Spring Boot application to Azure Container Apps and maintain it using the built-in Java stack.
Certifikace
Microsoft Certifikát: Azure Vývojářský Asistent - Certifications
Vytvářejte ucelená řešení v Microsoft Azure pro vytváření funkcí Azure, implementaci a správu webových aplikací, vývoj řešení využívajících úložiště Azure a další.
Dokumentace
Referenční informace pro vývojáře v Javě pro Azure Functions
Zjistěte, jak vyvíjet funkce pomocí Javy.
Vytvoření funkce Java z příkazového řádku – Azure Functions
Zjistěte, jak vytvořit funkci Java z příkazového řádku a pak publikovat místní projekt do bezserverového hostování ve službě Azure Functions.
Použití Javy a Gradle k publikování funkce do Azure
Vytvořte a publikujte funkci aktivovanou protokolem HTTP do Azure pomocí Javy a Gradle.