Samouczek: tworzenie aplikacji internetowej Java Spring Boot przy użyciu usługi aplikacja systemu Azure Service w systemach Linux i Azure Cosmos DB
Uwaga
W przypadku aplikacji Spring zalecamy używanie usługi Azure Spring Apps. Można jednak nadal używać usługi aplikacja systemu Azure jako miejsca docelowego. Aby uzyskać porady, zobacz Wskazówki dotyczące miejsca docelowego obciążenia w języku Java.
Ten samouczek przeprowadzi Cię przez proces tworzenia, konfigurowania, wdrażania i skalowania aplikacji internetowych w języku Java na platformie Azure. Po zakończeniu będziesz mieć aplikację Spring Boot przechowującą dane w bazie danych Azure Cosmos DB i działającą w usłudze Azure App Service w systemie Linux.
Z tego samouczka dowiesz się, jak wykonywać następujące czynności:
- Tworzy bazę danych usługi Azure Cosmos DB.
- Łączenie przykładowej aplikacji z bazą danych i jej lokalne testowanie
- Wdrażanie przykładowej aplikacji na platformie Azure
- Przesyłanie strumieniowe dzienników diagnostycznych z usługi App Service
- Dodawanie dodatkowych wystąpień do skalowania w poziomie przykładowej aplikacji
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.
Wymagania wstępne
- Interfejs wiersza polecenia platformy Azure zainstalowany na własnym komputerze.
- Usługa Git
- Java JDK
- Maven
Klonowanie przykładowej aplikacji TODO i przygotowanie repozytorium
W tym samouczku użyto przykładowej aplikacji listy TODO z internetowym interfejsem użytkownika, który wywołuje interfejs API REST platformy Spring wspierany przez usługę Spring Data dla usługi Azure Cosmos DB. Kod aplikacji jest dostępny w serwisie GitHub. Aby dowiedzieć się więcej na temat pisania aplikacji Java przy użyciu platformy Spring i usługi Azure Cosmos DB, zobacz samouczek Spring Boot Starter z usługą Azure Cosmos DB for NoSQL i przewodnik Szybki start Spring Data for Azure Cosmos DB.
Uruchom następujące polecenia w terminalu, aby sklonować przykładowe repozytorium i skonfigurować przykładowe środowisko aplikacji.
git clone --recurse-submodules https://github.com/Azure-Samples/e2e-java-experience-in-app-service-linux-part-2.git
cd e2e-java-experience-in-app-service-linux-part-2
yes | cp -rf .prep/* .
Tworzenie usługi Azure Cosmos DB
Wykonaj następujące kroki, aby utworzyć bazę danych Azure Cosmos DB w ramach swojej subskrypcji. Aplikacja listy TODO będzie nawiązywać połączenie z tą bazą danych i przechowywać jej dane podczas pracy, utrwalając stan aplikacji niezależnie od tego, gdzie ją uruchomisz.
Zaloguj się do interfejsu wiersza polecenia platformy Azure i opcjonalnie ustaw subskrypcję, jeśli masz więcej niż jedno połączenie z poświadczeniami logowania.
az login az account set -s <your-subscription-id>
Utwórz grupę zasobów platformy Azure i zanotuj jej nazwę.
az group create -n <your-azure-group-name> \ -l <your-resource-group-region>
Utwórz bazę danych Azure Cosmos DB przy użyciu rodzaju
GlobalDocumentDB
. Nazwa wystąpienia usługi Azure Cosmos DB musi używać tylko małych liter. Zanotuj poledocumentEndpoint
w odpowiedzi na polecenie.az cosmosdb create --kind GlobalDocumentDB \ -g <your-azure-group-name> \ -n <your-azure-COSMOS-DB-name-in-lower-case-letters>
Pobierz klucz bazy danych Azure Cosmos DB, aby nawiązać połączenie z aplikacją. Zachowaj element
primaryMasterKey
w pobliżu,documentEndpoint
ponieważ będą one potrzebne w następnym kroku.az cosmosdb keys list -g <your-azure-group-name> -n <your-azure-COSMOSDB-name>
Konfigurowanie właściwości aplikacji TODO
Otwórz terminal na swoim komputerze. Skopiuj przykładowy plik skryptu w sklonowanym repozytorium, aby dostosować go do utworzonej bazy danych usługi Azure Cosmos DB.
cd initial/spring-todo-app
cp set-env-variables-template.sh .scripts/set-env-variables.sh
Edytuj .scripts/set-env-variables.sh
w ulubionym edytorze i podaj informacje o połączeniu usługi Azure Cosmos DB. W przypadku konfiguracji systemu Linux usługi App Service użyj tego samego regionu, co poprzednia (your-resource-group-region
) i grupa zasobów (your-azure-group-name
) używana podczas tworzenia bazy danych usługi Azure Cosmos DB. Wybierz nazwę WEBAPP_NAME, która jest unikatowa, ponieważ nie może ona być duplikatem jakiejkolwiek nazwy aplikacji internetowej w jakimkolwiek wdrożeniu platformy Azure.
export COSMOSDB_URI=<put-your-COSMOS-DB-documentEndpoint-URI-here>
export COSMOSDB_KEY=<put-your-COSMOS-DB-primaryMasterKey-here>
export COSMOSDB_DBNAME=<put-your-COSMOS-DB-name-here>
# App Service Linux Configuration
export RESOURCEGROUP_NAME=<put-your-resource-group-name-here>
export WEBAPP_NAME=<put-your-Webapp-name-here>
export REGION=<put-your-REGION-here>
Następnie uruchom skrypt:
source .scripts/set-env-variables.sh
Te zmienne środowiskowe są używane w obszarze application.properties
w aplikacji listy TODO. Pola w pliku właściwości określają domyślną konfigurację repozytorium dla danych platformy Spring:
azure.cosmosdb.uri=${COSMOSDB_URI}
azure.cosmosdb.key=${COSMOSDB_KEY}
azure.cosmosdb.database=${COSMOSDB_DBNAME}
@Repository
public interface TodoItemRepository extends DocumentDbRepository<TodoItem, String> {
}
Następnie przykładowa aplikacja używa @Document
adnotacji zaimportowanej z com.microsoft.azure.spring.data.cosmosdb.core.mapping.Document
programu , aby skonfigurować typ jednostki do przechowywania i zarządzania przez usługę Azure Cosmos DB:
@Document
public class TodoItem {
private String id;
private String description;
private String owner;
private boolean finished;
Uruchamianie przykładowej aplikacji
Uruchom przykład przy użyciu narzędzia Maven.
mvn package spring-boot:run
Dane wyjściowe powinny wyglądać podobnie do poniższych.
bash-3.2$ mvn package spring-boot:run
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building spring-todo-app 2.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[INFO] SimpleUrlHandlerMapping - Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[INFO] WelcomePageHandlerMapping - Adding welcome page: class path resource [static/index.html]
2018-10-28 15:04:32.101 INFO 7673 --- [ main] c.m.azure.documentdb.DocumentClient : Initializing DocumentClient with serviceEndpoint [https://sample-cosmos-db-westus.documents.azure.com:443/], ConnectionPolicy [ConnectionPolicy [requestTimeout=60, mediaRequestTimeout=300, connectionMode=Gateway, mediaReadMode=Buffered, maxPoolSize=800, idleConnectionTimeout=60, userAgentSuffix=;spring-data/2.0.6;098063be661ab767976bd5a2ec350e978faba99348207e8627375e8033277cb2, retryOptions=com.microsoft.azure.documentdb.RetryOptions@6b9fb84d, enableEndpointDiscovery=true, preferredLocations=null]], ConsistencyLevel [null]
[INFO] AnnotationMBeanExporter - Registering beans for JMX exposure on startup
[INFO] TomcatWebServer - Tomcat started on port(s): 8080 (http) with context path ''
[INFO] TodoApplication - Started TodoApplication in 45.573 seconds (JVM running for 76.534)
Dostęp do aplikacji TODO platformy Spring można uzyskać lokalnie za pomocą tego linku po uruchomieniu aplikacji: http://localhost:8080/
.
Jeśli widzisz wyjątki zamiast komunikatu "Started TodoApplication", sprawdź, czy bash
skrypt w poprzednim kroku prawidłowo wyeksportował zmienne środowiskowe i czy wartości są poprawne dla utworzonej bazy danych usługi Azure Cosmos DB.
Konfigurowanie wdrożenia platformy Azure
pom.xml
Otwórz plik w initial/spring-boot-todo
katalogu i dodaj następującą wtyczkę aplikacji internetowej platformy Azure dla konfiguracji narzędzia Maven.
<plugins>
<!--*************************************************-->
<!-- Deploy to Java SE in App Service Linux -->
<!--*************************************************-->
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>2.5.0</version>
<configuration>
<schemaVersion>v2</schemaVersion>
<!-- Web App information -->
<resourceGroup>${RESOURCEGROUP_NAME}</resourceGroup>
<appName>${WEBAPP_NAME}</appName>
<region>${REGION}</region>
<pricingTier>P1v2</pricingTier>
<!-- Java Runtime Stack for Web App on Linux-->
<runtime>
<os>linux</os>
<javaVersion>Java 8</javaVersion>
<webContainer>Java SE</webContainer>
</runtime>
<deployment>
<resources>
<resource>
<directory>${project.basedir}/target</directory>
<includes>
<include>*.jar</include>
</includes>
</resource>
</resources>
</deployment>
<appSettings>
<property>
<name>COSMOSDB_URI</name>
<value>${COSMOSDB_URI}</value>
</property>
<property>
<name>COSMOSDB_KEY</name>
<value>${COSMOSDB_KEY}</value>
</property>
<property>
<name>COSMOSDB_DBNAME</name>
<value>${COSMOSDB_DBNAME}</value>
</property>
<property>
<name>JAVA_OPTS</name>
<value>-Dserver.port=80</value>
</property>
</appSettings>
</configuration>
</plugin>
...
</plugins>
Wdrażanie w usłudze App Service w systemie Linux
Użyj celu mvn azure-webapp:deploy
narzędzia Maven, aby wdrożyć aplikację TODO w usłudze Azure App Service w systemie Linux.
# Deploy
bash-3.2$ mvn azure-webapp:deploy
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building spring-todo-app 2.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- azure-webapp-maven-plugin:2.5.0:deploy (default-cli) @ spring-todo-app ---
Auth Type: AZURE_CLI
Default subscription: xxxxxxxxx
Username: xxxxxxxxx
[INFO] Subscription: xxxxxxxxx
[INFO] Creating App Service Plan 'ServicePlanb6ba8178-5bbb-49e7'...
[INFO] Successfully created App Service Plan.
[INFO] Creating web App spring-todo-app...
[INFO] Successfully created Web App spring-todo-app.
[INFO] Trying to deploy artifact to spring-todo-app...
[INFO] Successfully deployed the artifact to https://spring-todo-app.azurewebsites.net
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:19 min
[INFO] Finished at: 2019-11-06T15:32:03-07:00
[INFO] Final Memory: 50M/574M
[INFO] ------------------------------------------------------------------------
Dane wyjściowe zawierają adres URL wdrożonej aplikacji (w tym przykładzie: https://spring-todo-app.azurewebsites.net
). Możesz skopiować ten adres URL do przeglądarki internetowej lub uruchomić następujące polecenie w oknie terminalu, aby załadować aplikację.
explorer https://spring-todo-app.azurewebsites.net
Powinna zostać wyświetlona aplikacja działająca ze zdalnym adresem URL na pasku adresu:
Przesyłanie strumieniowe dzienników diagnostycznych
Aby uzyskać dostęp do dzienników konsoli wygenerowanych wewnątrz kodu aplikacji w usłudze App Service, włącz rejestrowanie diagnostyczne, uruchamiając następujące polecenie w usłudze Cloud Shell:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
Możliwe wartości parametru --level
to: Error
, Warning
, Info
i Verbose
. Każdy kolejny poziom obejmuje poprzedni poziom. Na przykład poziom Error
obejmuje tylko komunikaty o błędach, a poziom Verbose
obejmuje wszystkie komunikaty.
Po włączeniu rejestrowania diagnostycznego uruchom następujące polecenie, aby wyświetlić strumień dziennika:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Jeśli nie widzisz dzienników konsoli, sprawdź ponownie w ciągu 30 sekund.
Uwaga
Pliki dzienników można także sprawdzać w przeglądarce pod adresem https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
Aby w dowolnym momencie zatrzymać przesyłanie strumieniowe dzienników, naciśnij kombinację klawiszy Ctrl
+C
.
Skalowanie w poziomie aplikacji TODO
Skaluj aplikację w poziomie, dodając inny proces roboczy:
az appservice plan update --number-of-workers 2 \
--name ${WEBAPP_PLAN_NAME} \
--resource-group <your-azure-group-name>
Czyszczenie zasobów
Jeśli nie potrzebujesz tych zasobów w innym samouczku (zobacz Następne kroki), możesz je usunąć, uruchamiając następujące polecenie w usłudze Cloud Shell:
az group delete --name <your-azure-group-name> --yes
Następne kroki
Azure for Java DevelopersSpring Boot, Spring Data for Azure Cosmos DB, Azure Cosmos DB i App Service Linux.
Dowiedz się więcej na temat uruchamiania aplikacji w języku Java w usłudze App Service dla systemu Linux w przewodniku dla deweloperów.
Java in App Service Linux dev guide (Przewodnik dla deweloperów dotyczący języka Java w usłudze App Service dla systemu Linux)
Dowiedz się, jak zabezpieczyć aplikację przy użyciu domeny niestandardowej i certyfikatu.