Verwenden von Spring Data mit Azure Cosmos DB für Apache Cassandra API
In diesem Artikel werden Sie durch den Prozess der Erstellung, Konfiguration, Bereitstellung, Problembehandlung und Skalierung von Java Web Apps in Azure App Service unter Linux geführt.
Sie veranschaulicht die Verwendung der folgenden Komponenten:
Voraussetzungen
Die folgenden Voraussetzungen sind erforderlich, um die Schritte in diesem Artikel auszuführen:
- Um eine Java Web App in der Cloud bereitzustellen, benötigen Sie ein Azure-Abonnement. Wenn Sie noch nicht über ein Azure-Abonnement verfügen, können Sie Ihre MSDN-Abonnentenvorteile aktivieren oder sich für ein kostenloses Azure-Kontoregistrieren.
- Azure CLI 2.0
- Java 8 JDK
- Maven 3
Wichtig
Spring Boot Version 2.5 oder höher ist erforderlich, um die Schritte in diesem Artikel auszuführen.
Klonen des Repositorys für die exemplarische Java-Web-App
Für diese Übung verwenden Sie die Spring Todo-App, eine Java-Anwendung, die mit Spring Booterstellt wurde, Spring Data für Azure Cosmos DB und Azure Cosmos DB.
Klonen Sie die Spring Todo-App, und kopieren Sie den Inhalt des .prep-Ordners, um das Projekt zu initialisieren:
Bash:
git clone --recurse-submodules https://github.com/Azure-Samples/e2e-java-experience-in-app-service-linux-part-2.git yes | cp -rf .prep/* .
Für Windows:
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 xcopy .prep /f /s /e /y
Ändern Sie das Verzeichnis in den folgenden Ordner des geklonten Repositorys:
cd initial\spring-todo-app
Erstellen einer Azure Cosmos DB aus Azure CLI
Im folgenden Verfahren wird die Azure Cosmos DB-Datenbank mit CLI erstellt.
Melden Sie sich bei Ihrer Azure CLI an, und legen Sie Ihre Abonnement-ID fest.
az login
Legen Sie bei Bedarf die Abonnement-ID fest.
az account set -s <your-subscription-id>
Erstellen Sie eine Azure-Ressourcengruppe, und speichern Sie den Ressourcengruppennamen für die spätere Verwendung.
az group create \ --name <your-azure-group-name> \ --location <your-resource-group-region>
Erstellen Sie Azure Cosmos DB und geben Sie den Typ als GlobalDocumentDB an. Der Name der Azure Cosmos DB darf nur Kleinbuchstaben verwenden. Achten Sie darauf, das feld
documentEndpoint
in der Antwort zu notieren. Sie benötigen diesen Wert später.az cosmosdb create \ --resource-group <your-resource-group-name> \ --name <your-azure-COSMOS-DB-name-in-lower-case-letters> \ --kind GlobalDocumentDB
Rufen Sie Ihre Azure Cosmos DB-Schlüssel ab, und notieren Sie sich den Wert
primaryMasterKey
für später.az cosmosdb keys list \ --resource-group <your-azure-group-name> \ --name <your-azure-COSMOSDB-name>
App lokal erstellen und ausführen
Im folgenden Verfahren wird die Anwendung auf dem Entwicklungscomputer ausgeführt.
Konfigurieren Sie innerhalb Ihrer bevorzugten Konsole die Umgebungsvariablen aus den folgenden Codeabschnitten mit den Azure- und Azure Cosmos DB-Verbindungsinformationen, die Sie weiter oben in diesem Artikel gesammelt haben. Sie müssen einen eindeutigen Namen für WEBAPP_NAME und Wert für die variablen REGION angeben.
Für Linux (Bash):
export COSMOS_URI=<put-your-COSMOS-DB-documentEndpoint-URI-here> export COSMOS_KEY=<put-your-COSMOS-DB-primaryMasterKey-here> export COSMOS_DATABASE=<put-your-COSMOS-DATABASE-name-here> export RESOURCEGROUP_NAME=<put-your-resource-group-name-here> export WEBAPP_NAME=<put-your-Webapp-name-here> export REGION=<put-your-REGION-here> export SUBSCRIPTION_ID=<put-your-SUBSCRIPTION_ID-here>
Windows (Eingabeaufforderung):
set COSMOS_URI=<put-your-COSMOS-DB-documentEndpoint-URI-here> set COSMOS_KEY=<put-your-COSMOS-DB-primaryMasterKey-here> set COSMOS_DATABASE=<put-your-COSMOS-DATABASE-name-here> set RESOURCEGROUP_NAME=<put-your-resource-group-name-here> set WEBAPP_NAME=<put-your-Webapp-name-here> set REGION=<put-your-REGION-here> set SUBSCRIPTION_ID=<put-your-SUBSCRIPTION_ID-here>
Anmerkung
Wenn Sie diese Variablen mit einem Skript bereitstellen möchten, gibt es eine Vorlage für Bash im PREP-Verzeichnis, die Sie kopieren und als Ausgangspunkt verwenden können.
Ändern Sie das Verzeichnis mithilfe des folgenden Befehls:
cd initial/spring-todo-app
Führen Sie die Spring Todo-App lokal mit dem folgenden Befehl aus:
mvn package spring-boot:run
Nachdem die Anwendung gestartet wurde, können Sie die Bereitstellung überprüfen, indem Sie hier auf die Spring Todo-App zugreifen:
http://localhost:8080/
.
Bereitstellen für App Service (Linux)
Im folgenden Verfahren wird die Anwendung auf Linux in Azure bereitgestellt.
Öffnen Sie die Datei pom.xml, die Sie zuvor in das Verzeichnis initial/spring-todo-app des Repositorys kopiert haben. Stellen Sie sicher, dass das Maven-Plug-In für Azure App Service in der folgenden Datei pom.xml enthalten ist. Wenn die Version nicht auf 1.14.0festgelegt ist, aktualisieren Sie den Wert.
<plugins> <!--*************************************************--> <!-- Deploy to Java SE in App Service Linux --> <!--*************************************************--> <plugin> <groupId>com.microsoft.azure</groupId> <artifactId>azure-webapp-maven-plugin</artifactId> <version>1.14.0</version> <configuration> <schemaVersion>v2</schemaVersion> <subscriptionId>${SUBSCRIPTION_ID}</subscriptionId> <!-- 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>COSMOS_URI</name> <value>${COSMOS_URI}</value> </property> <property> <name>COSMOS_KEY</name> <value>${COSMOS_KEY}</value> </property> <property> <name>COSMOS_DATABASE</name> <value>${COSMOS_DATABASE}</value> </property> <property> <name>JAVA_OPTS</name> <value>-Dserver.port=80</value> </property> </appSettings> </configuration> </plugin> ... </plugins>
Führen Sie die Bereitstellung für Java SE in App Service (Linux) durch.
mvn azure-webapp:deploy
// Deploy bash-3.2$ mvn azure-webapp:deploy [INFO] Scanning for projects... [INFO] [INFO] -------< com.azure.spring.samples:spring-todo-app >-------- [INFO] Building spring-todo-app 2.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- azure-webapp-maven-plugin:1.14.0:deploy (default-cli) @ spring-todo-app --- Auth type: AZURE_CLI Default subscription: Consoto Subscription(subscription-id-xxx) Username: user@contoso.com [INFO] Subscription: Consoto Subscription(subscription-id-xxx) [INFO] Creating app service plan... [INFO] Successfully created app service plan asp-spring-todo-app. [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:05 min [INFO] Finished at: 2021-05-28T09:43:19+08:00 [INFO] ------------------------------------------------------------------------
Navigieren Sie zu Ihrer Web-App, die unter Java SE in App Service Linux ausgeführt wird:
https://<WEBAPP_NAME>.azurewebsites.net
ausgeführt wird
Fehlerbehebung der Spring Todo-App auf Azure durch Protokollanzeige.
Das folgende Verfahren öffnet Protokolldateien in Azure.
Konfigurieren Sie Protokolle für die bereitgestellte Java-Web-App in Azure App Service unter Linux:
az webapp log config \ --name ${WEBAPP_NAME} \ --resource-group ${RESOURCEGROUP_NAME} \ --web-server-logging filesystem
Öffnen Sie den Remoteprotokollstream der Java-Web-App von einem lokalen Computer aus:
az webapp log tail \ --name ${WEBAPP_NAME} \ --resource-group ${RESOURCEGROUP_NAME}
bash-3.2$ az webapp log tail --name ${WEBAPP_NAME} --resource-group ${RESOURCEGROUP_NAME} 2021-05-28T01:46:08.000655632Z _____ 2021-05-28T01:46:08.000701432Z / _ \ __________ _________ ____ 2021-05-28T01:46:08.000708133Z / /_\ \___ / | \_ __ \_/ __ \ 2021-05-28T01:46:08.000711733Z / | \/ /| | /| | \/\ ___/ 2021-05-28T01:46:08.000714933Z \____|__ /_____ \____/ |__| \___ > 2021-05-28T01:46:08.000718233Z \/ \/ \/ 2021-05-28T01:46:08.000721333Z A P P S E R V I C E O N L I N U X 2021-05-28T01:46:08.000724233Z Documentation: http://aka.ms/webapp-linux ... ... 2021-05-28T01:46:18.925044188Z . ____ _ __ _ _ 2021-05-28T01:46:18.925481392Z /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ 2021-05-28T01:46:18.926004297Z ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ 2021-05-28T01:46:18.926587603Z \\/ ___)| |_)| | | | | || (_| | ) ) ) ) 2021-05-28T01:46:18.926599403Z ' |____| .__|_| |_|_| |_\__, | / / / / 2021-05-28T01:46:18.926841806Z =========|_|==============|___/=/_/_/_/ 2021-05-28T01:46:18.931157849Z :: Spring Boot :: (v2.4.5) ... ... 2021-05-28T01:46:29.842553633Z 2021-05-28 01:46:29.842 INFO 124 --- [ main] c.azure.spring. samples.TodoApplication : Started TodoApplication in 12.635 seconds (JVM running for 17.664) 2021-05-28T01:46:30.477951594Z 2021-05-28 01:46:30.477 INFO 124 --- [p-nio-80-exec-1] o.a.c.c.C. [Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2021-05-28T01:46:30.483316162Z 2021-05-28 01:46:30.483 INFO 124 --- [p-nio-80-exec-1] o.s.web. servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2021-05-28T01:46:30.485411088Z 2021-05-28 01:46:30.484 INFO 124 --- [p-nio-80-exec-1] o.s.web. servlet.DispatcherServlet : Completed initialization in 0 ms 2021-05-28T01:47:19.683003828Z 2021-05-28 01:47:19.682 INFO 124 --- [p-nio-80-exec-9] c.a.s.s. controller.TodoListController : GET request access '/api/todolist' path. 2021-05-28T01:47:26.069984388Z 2021-05-28 01:47:26.069 INFO 124 --- [-nio-80-exec-10] c.a.s.s. controller.TodoListController : POST request access '/api/todolist' path with item: Milk 2021-05-28T01:47:26.649080678Z 2021-05-28 01:47:26.648 INFO 124 --- [p-nio-80-exec-1] c.a.s.s. controller.TodoListController : GET request access '/api/todolist' path.
Aufskalieren der Spring-Todo-App
Verwenden Sie das folgende Verfahren, um die Anwendung zu skalieren.
Skalieren der Java Web App mit Azure CLI:
az appservice plan update \ --number-of-workers 2 \ --name ${WEBAPP_PLAN_NAME} \ --resource-group ${RESOURCEGROUP_NAME}
Nächste Schritte
- Java in App Service Linux Entwicklerleitfaden
- Azure für Java-Entwickler Um mehr über Spring und Azure zu erfahren, fahren Sie mit dem Spring on Azure-Dokumentationscenter fort.
Weitere Informationen
Weitere Informationen zur Verwendung von Spring Boot-Anwendungen in Azure finden Sie in den folgenden Artikeln:
Bereitstellen einer Spring Boot-Anwendung auf Linux auf Azure App Service
Ausführen einer Spring Boot Application auf einem Kubernetes-Cluster im Azure Container Service
Weitere Informationen zur Verwendung von Azure mit Java finden Sie unter Azure für Java-Entwickler und Working with Azure DevOps and Java (Arbeiten mit Azure DevOps und Java).
Das Spring Framework ist eine Open-Source-Lösung, mit der Java-Entwickler Anwendungen auf Unternehmensebene erstellen können. Eines der beliebtesten Projekte, die auf dieser Plattform basieren, ist Spring Boot, der einen vereinfachten Ansatz zum Erstellen eigenständiger Java-Anwendungen bietet. Um Entwicklern bei den ersten Schritten mit Spring Boot zu helfen, stehen mehrere Beispiel-Spring Boot-Pakete unter https://github.com/spring-guides/zur Verfügung. Neben der Auswahl aus der Liste der grundlegenden Spring Boot-Projekte hilft der Spring Initializr Entwicklern bei den ersten Schritten beim Erstellen benutzerdefinierter Spring Boot-Anwendungen.