Przewodnik dla deweloperów języka Java usługi Azure Functions
Ten przewodnik zawiera szczegółowe informacje ułatwiające pomyślne opracowywanie usługi Azure Functions przy użyciu języka Java.
Jako deweloper języka Java, jeśli dopiero zaczynasz korzystać z usługi Azure Functions, rozważ najpierw przeczytanie jednego z następujących artykułów:
Wprowadzenie | Pojęcia | Scenariusze/przykłady |
---|---|---|
Podstawy funkcji Języka Java
Funkcja Języka Java jest public
metodą ozdobioną adnotacją @FunctionName
. Ta metoda definiuje wpis dla funkcji Języka Java i musi być unikatowy w określonym pakiecie. Pakiet może mieć wiele klas z wieloma metodami publicznymi z adnotacjami .@FunctionName
Pojedynczy pakiet jest wdrażany w aplikacji funkcji na platformie Azure. Na platformie Azure aplikacja funkcji udostępnia kontekst wdrażania, wykonywania i zarządzania dla poszczególnych funkcji Java.
Model programowania
Pojęcia wyzwalaczy i powiązań są podstawowe dla usługi Azure Functions. Wyzwalacze rozpoczynają wykonywanie kodu. Powiązania umożliwiają przekazywanie danych do funkcji i zwracanie ich z funkcji bez konieczności pisania niestandardowego kodu dostępu do danych.
Tworzenie funkcji Języka Java
Aby ułatwić tworzenie funkcji Języka Java, istnieją narzędzia oparte na narzędziu Maven i archetypy, które używają wstępnie zdefiniowanych szablonów języka Java, aby ułatwić tworzenie projektów za pomocą określonego wyzwalacza funkcji.
Narzędzia oparte na narzędziu maven
Następujące środowiska deweloperskie zawierają narzędzia usługi Azure Functions, które umożliwiają tworzenie projektów funkcji Języka Java:
W tych artykułach pokazano, jak utworzyć swoje pierwsze funkcje przy użyciu wybranego środowiska IDE.
Tworzenie szkieletu projektu
Jeśli wolisz tworzenie wierszy polecenia z poziomu terminalu, najprostszym sposobem tworzenia szkieletu projektów funkcji opartych na języku Java jest użycie Apache Maven
archetypów. Archetyp narzędzia Java Maven dla usługi Azure Functions jest publikowany w ramach następującej grupy GroupId:artifactId: com.microsoft.azure:azure-functions-archetype.
Następujące polecenie generuje nowy projekt funkcji Java przy użyciu tego archetypu:
mvn archetype:generate \
-DarchetypeGroupId=com.microsoft.azure \
-DarchetypeArtifactId=azure-functions-archetype
Aby rozpocząć korzystanie z tego archetypu , zobacz przewodnik Szybki start dla języka Java.
Struktura folderów
Oto struktura folderów projektu Java usługi Azure Functions:
FunctionsProject
| - src
| | - main
| | | - java
| | | | - FunctionApp
| | | | | - MyFirstFunction.java
| | | | | - MySecondFunction.java
| - target
| | - azure-functions
| | | - FunctionApp
| | | | - FunctionApp.jar
| | | | - host.json
| | | | - MyFirstFunction
| | | | | - function.json
| | | | - MySecondFunction
| | | | | - function.json
| | | | - bin
| | | | - lib
| - pom.xml
Aby skonfigurować aplikację funkcji, możesz użyć udostępnionego pliku host.json . Każda funkcja ma własny plik kodu (.java) i plik konfiguracji powiązania (function.json).
W projekcie może znajdować się więcej niż jedna funkcja. Nie umieszczaj jednak funkcji w oddzielnych plikach jar. Używanie wielu plików JAR w jednej aplikacji funkcji nie jest obsługiwane. Element FunctionApp
w katalogu docelowym jest wdrażany w aplikacji funkcji na platformie Azure.
Wyzwalacze i adnotacje
Funkcje są wywoływane przez wyzwalacz, taki jak żądanie HTTP, czasomierz lub aktualizacja danych. Funkcja musi przetworzyć ten wyzwalacz i inne dane wejściowe, aby wygenerować co najmniej jedno wyjście.
Użyj adnotacji Języka Java zawartych w pakiecie com.microsoft.azure.functions.annotation.* w celu powiązania danych wejściowych i wyjściowych z metodami. Aby uzyskać więcej informacji, zobacz dokumentację referencyjną języka Java.
Ważne
Musisz skonfigurować konto usługi Azure Storage w local.settings.json , aby uruchamiać wyzwalacze usługi Azure Blob Storage, Azure Queue Storage lub Azure Table Storage lokalnie.
Przykład:
public class Function {
public String echo(@HttpTrigger(name = "req",
methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS)
String req, ExecutionContext context) {
return String.format(req);
}
}
Oto wygenerowany element odpowiadający function.json
wtyczki azure-functions-maven-plugin:
{
"scriptFile": "azure-functions-example.jar",
"entryPoint": "com.example.Function.echo",
"bindings": [
{
"type": "httpTrigger",
"name": "req",
"direction": "in",
"authLevel": "anonymous",
"methods": [ "GET","POST" ]
},
{
"type": "http",
"name": "$return",
"direction": "out"
}
]
}
Wersje języka Java
Wersja języka Java, w której aplikacja działa na platformie Azure, jest określona w pliku pom.xml. Archetyp narzędzia Maven generuje obecnie pom.xml dla języka Java 8, który można zmienić przed opublikowaniem. Wersja języka Java w pom.xml powinna być zgodna z wersją, w której lokalnie utworzono i przetestowano aplikację.
Obsługiwane wersje
W poniższej tabeli przedstawiono bieżące obsługiwane wersje języka Java dla każdej wersji głównej środowiska uruchomieniowego usługi Functions według systemu operacyjnego:
Wersja usługi Functions | Wersje języka Java (Windows) | Wersje języka Java (Linux) |
---|---|---|
4.x | 17 11 8 |
21 (wersja zapoznawcza) 17 11 8 |
3.x | 11 8 |
11 8 |
2.x | 8 | nie dotyczy |
Jeśli nie określisz wersji języka Java dla danego wdrożenia, archetyp narzędzia Maven domyślnie ma 8 podczas wdrażania na platformie Azure.
Określanie wersji wdrożenia
Możesz kontrolować wersję języka Java przeznaczoną dla archetypu narzędzia Maven przy użyciu parametru -DjavaVersion
. Wartość tego parametru może mieć wartość 8
, 11
lub 17
21
.
Archetyp narzędzia Maven generuje pom.xml, który jest przeznaczony dla określonej wersji języka Java. Następujące elementy w pom.xml wskazują wersję języka Java do użycia:
Element | Wartość języka Java 8 | Wartość języka Java 11 | Wartość języka Java 17 | Wartość java 21 (wersja zapoznawcza, Linux) | opis |
---|---|---|---|---|---|
Java.version |
1.8 | 11 | 17 | 21 | Wersja języka Java używana przez wtyczkę maven-compiler-plugin. |
JavaVersion |
8 | 11 | 17 | 21 | Wersja języka Java hostowana przez aplikację funkcji na platformie Azure. |
W poniższych przykładach przedstawiono ustawienia języka Java 8 w odpowiednich sekcjach pliku pom.xml:
Java.version
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<azure.functions.maven.plugin.version>1.6.0</azure.functions.maven.plugin.version>
<azure.functions.java.library.version>1.3.1</azure.functions.java.library.version>
<functionAppName>fabrikam-functions-20200718015742191</functionAppName>
<stagingDirectory>${project.build.directory}/azure-functions/${functionAppName}</stagingDirectory>
</properties>
JavaVersion
<runtime>
<!-- runtime os, could be windows, linux or docker-->
<os>windows</os>
<javaVersion>8</javaVersion>
<!-- for docker function, please set the following parameters -->
<!-- <image>[hub-user/]repo-name[:tag]</image> -->
<!-- <serverId></serverId> -->
<!-- <registryUrl></registryUrl> -->
</runtime>
Ważne
Zmienna środowiskowa JAVA_HOME musi być poprawnie ustawiona na katalog JDK używany podczas kompilowania kodu przy użyciu narzędzia Maven. Upewnij się, że wersja zestawu JDK jest co najmniej tak wysoka, jak ustawienie Java.version
.
Określanie systemu operacyjnego wdrożenia
Narzędzie Maven umożliwia również określenie systemu operacyjnego, na którym działa aplikacja funkcji na platformie Azure. os
Użyj elementu , aby wybrać system operacyjny.
Element | Windows | Linux | Docker |
---|---|---|---|
os |
windows |
linux |
docker |
Poniższy przykład przedstawia ustawienie systemu operacyjnego w runtime
sekcji pliku pom.xml:
<runtime>
<!-- runtime os, could be windows, linux or docker-->
<os>windows</os>
<javaVersion>8</javaVersion>
<!-- for docker function, please set the following parameters -->
<!-- <image>[hub-user/]repo-name[:tag]</image> -->
<!-- <serverId></serverId> -->
<!-- <registryUrl></registryUrl> -->
</runtime>
Dostępność i obsługa środowiska uruchomieniowego zestawu JDK
Wersje zestawu OpenJDK firmy Microsoft i adoptium są udostępniane i obsługiwane w usługach Functions dla języka Java 8 (Adoptium), Java 11, 17 i 21 (MSFT). Te pliki binarne są udostępniane jako bezpłatna, wieloplatformowa, gotowa do produkcji dystrybucja zestawu OpenJDK dla platformy Azure. Zawierają one wszystkie składniki do kompilowania i uruchamiania aplikacji Java SE.
W przypadku lokalnego programowania lub testowania możesz bezpłatnie pobrać kompilację microsoft openJDK lub plików binarnych Adoptium Temurin . pomoc techniczna platformy Azure w przypadku problemów z zestawami JDK i aplikacjami funkcji jest dostępny z kwalifikowanym planem pomocy technicznej.
Jeśli chcesz nadal używać aplikacji Zulu dla plików binarnych platformy Azure w aplikacji funkcji, skonfiguruj odpowiednio aplikację. Możesz nadal używać plików binarnych Azul dla swojej witryny. Jednak wszelkie poprawki lub ulepszenia zabezpieczeń są dostępne tylko w nowych wersjach zestawu OpenJDK. W związku z tym należy ostatecznie usunąć tę konfigurację, aby aplikacje korzystały z najnowszej dostępnej wersji języka Java.
Dostosowywanie maszyny wirtualnej JVM
Usługa Functions umożliwia dostosowanie maszyny wirtualnej Java (JVM) używanej do uruchamiania funkcji Języka Java. Domyślnie są używane następujące opcje JVM:
-XX:+TieredCompilation
-XX:TieredStopAtLevel=1
-noverify
-Djava.net.preferIPv4Stack=true
-jar
Inne argumenty dla maszyny JVM można podać przy użyciu jednego z następujących ustawień aplikacji, w zależności od typu planu:
Typ planu | Nazwa ustawienia | Komentarz |
---|---|---|
Plan zużycia | languageWorkers__java__arguments |
To ustawienie zwiększa zimny czas uruchamiania funkcji Języka Java uruchomionych w planie Zużycie. |
Plan Premium Dedykowany plan |
JAVA_OPTS |
W poniższych sekcjach pokazano, jak dodać te ustawienia. Aby dowiedzieć się więcej na temat pracy z ustawieniami aplikacji, zobacz sekcję Praca z ustawieniami aplikacji.
Azure Portal
W witrynie Azure Portal użyj karty Ustawienia aplikacji, aby dodać languageWorkers__java__arguments
ustawienie lub JAVA_OPTS
.
Interfejs wiersza polecenia platformy Azure
Możesz użyć polecenia az functionapp config appsettings set , aby dodać te ustawienia, jak pokazano w poniższym przykładzie -Djava.awt.headless=true
dla opcji:
az functionapp config appsettings set \
--settings "languageWorkers__java__arguments=-Djava.awt.headless=true" \
--name <APP_NAME> --resource-group <RESOURCE_GROUP>
W tym przykładzie włączono tryb bezgłowy. Zastąp <APP_NAME>
ciąg nazwą aplikacji funkcji i <RESOURCE_GROUP>
grupą zasobów.
Biblioteki innych firm
Usługa Azure Functions obsługuje korzystanie z bibliotek innych firm. Domyślnie wszystkie zależności określone w pliku projektu pom.xml
są automatycznie dołączane podczas mvn package
celu. W przypadku bibliotek, które nie są określone jako zależności w pom.xml
pliku, umieść je w lib
katalogu głównym funkcji. Zależności umieszczone w katalogu są dodawane do modułu lib
ładującego klasy systemowej w czasie wykonywania.
Zależność com.microsoft.azure.functions:azure-functions-java-library
jest domyślnie udostępniana na ścieżce klasy i nie musi być uwzględniona w lib
katalogu. Ponadto usługa azure-functions-java-worker dodaje zależności wymienione tutaj do ścieżki klasy.
Obsługa typów danych
Można użyć zwykłych starych obiektów Java (POJO), typów zdefiniowanych w azure-functions-java-library
, lub typów danych pierwotnych, takich jak Ciąg i Liczba całkowita, aby powiązać z powiązaniami wejściowymi lub wyjściowymi.
Obiekty POJO
W przypadku konwertowania danych wejściowych na poJO usługa azure-functions-java-worker używa biblioteki gson . Typy POJO używane jako dane wejściowe do funkcji powinny mieć wartość public
.
Dane binarne
Powiąż dane wejściowe lub wyjściowe binarne z byte[]
dataType
elementem , ustawiając pole w function.json na binary
wartość :
@FunctionName("BlobTrigger")
@StorageAccount("AzureWebJobsStorage")
public void blobTrigger(
@BlobTrigger(name = "content", path = "myblob/{fileName}", dataType = "binary") byte[] content,
@BindingName("fileName") String fileName,
final ExecutionContext context
) {
context.getLogger().info("Java Blob trigger function processed a blob.\n Name: " + fileName + "\n Size: " + content.length + " Bytes");
}
Jeśli oczekujesz wartości null, użyj polecenia Optional<T>
.
Powiązania
Powiązania wejściowe i wyjściowe zapewniają deklaratywny sposób nawiązywania połączenia z danymi z poziomu kodu. Funkcja może mieć wiele powiązań wejściowych i wyjściowych.
Przykład powiązania wejściowego
package com.example;
import com.microsoft.azure.functions.annotation.*;
public class Function {
@FunctionName("echo")
public static String echo(
@HttpTrigger(name = "req", methods = { HttpMethod.PUT }, authLevel = AuthorizationLevel.ANONYMOUS, route = "items/{id}") String inputReq,
@TableInput(name = "item", tableName = "items", partitionKey = "Example", rowKey = "{id}", connection = "AzureWebJobsStorage") TestInputData inputData,
@TableOutput(name = "myOutputTable", tableName = "Person", connection = "AzureWebJobsStorage") OutputBinding<Person> testOutputData
) {
testOutputData.setValue(new Person(httpbody + "Partition", httpbody + "Row", httpbody + "Name"));
return "Hello, " + inputReq + " and " + inputData.getKey() + ".";
}
public static class TestInputData {
public String getKey() { return this.rowKey; }
private String rowKey;
}
public static class Person {
public String partitionKey;
public String rowKey;
public String name;
public Person(String p, String r, String n) {
this.partitionKey = p;
this.rowKey = r;
this.name = n;
}
}
}
Ta funkcja jest wywoływana z żądaniem HTTP.
- Ładunek żądania HTTP jest przekazywany jako element
String
argumentuinputReq
. - Jeden wpis jest pobierany z usługi Table Storage i jest przekazywany jako
TestInputData
argumentinputData
.
Aby otrzymać partię danych wejściowych, można powiązać z String[]
elementami , POJO[]
, List<String>
lub List<POJO>
.
@FunctionName("ProcessIotMessages")
public void processIotMessages(
@EventHubTrigger(name = "message", eventHubName = "%AzureWebJobsEventHubPath%", connection = "AzureWebJobsEventHubSender", cardinality = Cardinality.MANY) List<TestEventData> messages,
final ExecutionContext context)
{
context.getLogger().info("Java Event Hub trigger received messages. Batch size: " + messages.size());
}
public class TestEventData {
public String id;
}
Ta funkcja jest wyzwalana za każdym razem, gdy w skonfigurowanym centrum zdarzeń znajdują się nowe dane. cardinality
Ponieważ parametr jest ustawiony na MANY
wartość , funkcja odbiera partię komunikatów z centrum zdarzeń. EventData
z centrum zdarzeń jest konwertowany na TestEventData
w celu wykonania funkcji.
Przykład powiązania wyjściowego
Powiązanie danych wyjściowych z wartością zwracaną można powiązać przy użyciu polecenia $return
.
package com.example;
import com.microsoft.azure.functions.annotation.*;
public class Function {
@FunctionName("copy")
@StorageAccount("AzureWebJobsStorage")
@BlobOutput(name = "$return", path = "samples-output-java/{name}")
public static String copy(@BlobTrigger(name = "blob", path = "samples-input-java/{name}") String content) {
return content;
}
}
Jeśli istnieje wiele powiązań wyjściowych, użyj wartości zwracanej tylko dla jednego z nich.
Aby wysłać wiele wartości wyjściowych, użyj OutputBinding<T>
wartości zdefiniowanych w pakiecie azure-functions-java-library
.
@FunctionName("QueueOutputPOJOList")
public HttpResponseMessage QueueOutputPOJOList(@HttpTrigger(name = "req", methods = { HttpMethod.GET,
HttpMethod.POST }, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
@QueueOutput(name = "itemsOut", queueName = "test-output-java-pojo", connection = "AzureWebJobsStorage") OutputBinding<List<TestData>> itemsOut,
final ExecutionContext context) {
context.getLogger().info("Java HTTP trigger processed a request.");
String query = request.getQueryParameters().get("queueMessageId");
String queueMessageId = request.getBody().orElse(query);
itemsOut.setValue(new ArrayList<TestData>());
if (queueMessageId != null) {
TestData testData1 = new TestData();
testData1.id = "msg1"+queueMessageId;
TestData testData2 = new TestData();
testData2.id = "msg2"+queueMessageId;
itemsOut.getValue().add(testData1);
itemsOut.getValue().add(testData2);
return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + queueMessageId).build();
} else {
return request.createResponseBuilder(HttpStatus.INTERNAL_SERVER_ERROR)
.body("Did not find expected items in CosmosDB input list").build();
}
}
public static class TestData {
public String id;
}
Ta funkcja jest wywoływana HttpRequest
na obiekcie. Zapisuje wiele wartości w usłudze Queue Storage.
HttpRequestMessage i HttpResponseMessage
Są one zdefiniowane w pliku azure-functions-java-library
. Są one typami pomocnika do pracy z funkcjami HttpTrigger.
Wyspecjalizowany typ | Obiekt docelowy | Typowe użycie |
---|---|---|
HttpRequestMessage<T> |
Wyzwalacz HTTP | Pobiera metodę, nagłówki lub zapytania |
HttpResponseMessage |
Powiązanie danych wyjściowych HTTP | Zwraca stan inny niż 200 |
Metadane
Kilka wyzwalaczy wysyła metadane wyzwalacza wraz z danymi wejściowymi. Możesz użyć adnotacji @BindingName
, aby powiązać z metadanymi wyzwalacza.
package com.example;
import java.util.Optional;
import com.microsoft.azure.functions.annotation.*;
public class Function {
@FunctionName("metadata")
public static String metadata(
@HttpTrigger(name = "req", methods = { HttpMethod.GET, HttpMethod.POST }, authLevel = AuthorizationLevel.ANONYMOUS) Optional<String> body,
@BindingName("name") String queryValue
) {
return body.orElse(queryValue);
}
}
W poprzednim przykładzie parametr queryValue
jest powiązany z parametrem name
ciągu zapytania w adresie URL żądania HTTP. http://{example.host}/api/metadata?name=test
Oto kolejny przykład przedstawiający sposób powiązania z Id
metadanymi wyzwalacza kolejki.
@FunctionName("QueueTriggerMetadata")
public void QueueTriggerMetadata(
@QueueTrigger(name = "message", queueName = "test-input-java-metadata", connection = "AzureWebJobsStorage") String message,@BindingName("Id") String metadataId,
@QueueOutput(name = "output", queueName = "test-output-java-metadata", connection = "AzureWebJobsStorage") OutputBinding<TestData> output,
final ExecutionContext context
) {
context.getLogger().info("Java Queue trigger function processed a message: " + message + " with metadataId:" + metadataId );
TestData testData = new TestData();
testData.id = metadataId;
output.setValue(testData);
}
Uwaga
Nazwa podana w adnotacji musi być zgodna z właściwością metadanych.
Kontekst wykonywania
ExecutionContext
, zdefiniowany w pliku azure-functions-java-library
, zawiera metody pomocnicze do komunikowania się ze środowiskiem uruchomieniowym funkcji. Aby uzyskać więcej informacji, zobacz artykuł executionContext reference (Dokumentacja wykonaniacontextu).
Rejestratora
Użyj polecenia getLogger
, zdefiniowanego w pliku ExecutionContext
, aby napisać dzienniki z kodu funkcji.
Przykład:
import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.*;
public class Function {
public String echo(@HttpTrigger(name = "req", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) String req, ExecutionContext context) {
if (req.isEmpty()) {
context.getLogger().warning("Empty request body received by function " + context.getFunctionName() + " with invocation " + context.getInvocationId());
}
return String.format(req);
}
}
Wyświetlanie dzienników i śladów
Interfejs wiersza polecenia platformy Azure umożliwia przesyłanie strumieniowe dzienników stdout i stderr języka Java oraz innych rejestrowania aplikacji.
Oto jak skonfigurować aplikację funkcji do zapisywania rejestrowania aplikacji przy użyciu interfejsu wiersza polecenia platformy Azure:
az webapp log config --name functionname --resource-group myResourceGroup --application-logging true
Aby przesłać strumieniowo dane wyjściowe rejestrowania dla aplikacji funkcji przy użyciu interfejsu wiersza polecenia platformy Azure, otwórz nowy wiersz polecenia, powłokę Bash lub sesję terminalu i wprowadź następujące polecenie:
Polecenie az webapp log tail ma opcje filtrowania danych wyjściowych przy użyciu --provider
opcji .
Aby pobrać pliki dziennika jako pojedynczy plik ZIP przy użyciu interfejsu wiersza polecenia platformy Azure, otwórz nowy wiersz polecenia, powłokę Bash lub sesję terminalu i wprowadź następujące polecenie:
az webapp log download --resource-group resourcegroupname --name functionappname
Przed uruchomieniem tego polecenia należy włączyć rejestrowanie systemu plików w witrynie Azure Portal lub interfejsie wiersza polecenia platformy Azure.
Zmienne środowiskowe
W usłudze Functions ustawienia aplikacji, takie jak parametry połączenia usługi, są widoczne jako zmienne środowiskowe podczas wykonywania. Dostęp do tych ustawień można uzyskać za pomocą polecenia System.getenv("AzureWebJobsStorage")
.
Poniższy przykład pobiera ustawienie aplikacji z kluczem o nazwie myAppSetting
:
public class Function {
public String echo(@HttpTrigger(name = "req", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) String req, ExecutionContext context) {
context.getLogger().info("My app setting value: "+ System.getenv("myAppSetting"));
return String.format(req);
}
}
Używanie wstrzykiwania zależności w usłudze Java Functions
Język Java usługi Azure Functions obsługuje wzorzec projektowania oprogramowania iniekcji zależności (DI), który jest techniką umożliwiającą osiągnięcie inwersji kontroli (IoC) między klasami i ich zależnościami. Usługa Azure Functions w języku Java umożliwia integrację z popularnymi strukturami wstrzykiwania zależności w aplikacjach usługi Functions. Azure Functions Java SPI zawiera interfejs FunctionInstanceInjector. Implementując ten interfejs, można zwrócić wystąpienie klasy funkcji, a funkcje będą wywoływane w tym wystąpieniu. Zapewnia to platformy takie jak Spring, Quarkus, Google Guice, Dagger itp. możliwość tworzenia wystąpienia funkcji i rejestrowania go w kontenerze IOC. Oznacza to, że możesz użyć tych struktur iniekcji zależności do zarządzania funkcjami naturalnie.
Uwaga
Microsoft Azure Functions Java SPI Types (azure-function-java-spi) to pakiet zawierający wszystkie interfejsy SPI dla innych firm do interakcji ze środowiskiem uruchomieniowym usługi Microsoft Azure Functions.
Iniekcja wystąpienia funkcji do wstrzykiwania zależności
azure-function-java-spi zawiera interfejs FunctionInstanceInjector
package com.microsoft.azure.functions.spi.inject;
/**
* The instance factory used by DI framework to initialize function instance.
*
* @since 1.0.0
*/
public interface FunctionInstanceInjector {
/**
* This method is used by DI framework to initialize the function instance. This method takes in the customer class and returns
* an instance create by the DI framework, later customer functions will be invoked on this instance.
* @param functionClass the class that contains customer functions
* @param <T> customer functions class type
* @return the instance that will be invoked on by azure functions java worker
* @throws Exception any exception that is thrown by the DI framework during instance creation
*/
<T> T getInstance(Class<T> functionClass) throws Exception;
}
Aby uzyskać więcej przykładów, które używają klasy FunctionInstanceInjector do integracji z strukturami wstrzykiwania zależności, zapoznaj się z tym repozytorium.
Następne kroki
Aby uzyskać więcej informacji na temat programowania w języku Java usługi Azure Functions, zobacz następujące zasoby:
- Najlepsze rozwiązania dotyczące usługi Azure Functions
- Dokumentacja usługi Azure Functions dla deweloperów
- Wyzwalacze i powiązania usługi Azure Functions
- Lokalne programowanie i debugowanie za pomocą programu Visual Studio Code, intelliJ i środowiska Eclipse
- Zdalne debugowanie funkcji Języka Java przy użyciu programu Visual Studio Code
- Wtyczka Maven dla usługi Azure Functions
- Usprawnij tworzenie funkcji za pomocą
azure-functions:add
celu i przygotuj katalog przejściowy do wdrożenia pliku ZIP.