Używanie rozwiązania Spring Data z usługą Azure Cosmos DB dla interfejsu API Apache Cassandra
W tym artykule omówimy proces kompilowania, konfigurowania, wdrażania, rozwiązywania problemów i skalowania aplikacji internetowych w języku Java w usłudze Azure App Service dla systemu Linux.
Zademonstrujemy sposób użycia następujących składników:
- Spring Boot Starter z usługą Azure Cosmos DB for NoSQL
- Azure Cosmos DB
- App Service dla systemu Linux
Wymagania wstępne
Aby wykonać czynności opisane w tym artykule, wymagane są:
- Aby wdrożyć w chmurze aplikację internetową w języku Java, potrzebujesz subskrypcji platformy Azure. Jeśli nie masz jeszcze subskrypcji platformy Azure, możesz aktywować korzyści dla subskrybentów MSDN lub założyć bezpłatne konto platformy Azure.
- Interfejs wiersza polecenia platformy Azure 2.0
- Java 8 JDK
- Maven 3
Ważne
Do wykonania kroków opisanych w tym artykule jest wymagany program Spring Boot w wersji 2.5 lub nowszej.
Klonowanie przykładowego repozytorium aplikacji internetowych w języku Java
W tym ćwiczeniu będziesz używać aplikacji Spring Todo, która jest aplikacją Java utworzoną przy użyciu platformy Spring Boot, Spring Data dla usług Azure Cosmos DB i Azure Cosmos DB.
Sklonuj aplikację Spring Todo i skopiuj zawartość folderu .prep, aby zainicjować projekt:
W przypadku środowiska powłoki Bash:
git clone --recurse-submodules https://github.com/Azure-Samples/e2e-java-experience-in-app-service-linux-part-2.git yes | cp -rf .prep/* .
Dla systemu 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
Zmień katalog na następujący folder w sklonowanym repozytorium:
cd initial\spring-todo-app
Tworzenie usługi Azure Cosmos DB z poziomu interfejsu wiersza polecenia platformy Azure
Poniższa procedura tworzy bazę danych usługi Azure Cosmos DB przy użyciu interfejsu wiersza polecenia.
Zaloguj się do interfejsu wiersza polecenia platformy Azure i ustaw identyfikator subskrypcji.
az login
W razie potrzeby ustaw identyfikator subskrypcji.
az account set -s <your-subscription-id>
Utwórz grupę zasobów platformy Azure i zapisz nazwę grupy zasobów do późniejszego użycia.
az group create \ --name <your-azure-group-name> \ --location <your-resource-group-region>
Utwórz usługę Azure Cosmos DB i określ typ globaldocumentDB. Nazwa usługi Azure Cosmos DB musi używać tylko małych liter. Pamiętaj, aby zanotować pole
documentEndpoint
w odpowiedzi. Ta wartość będzie potrzebna później.az cosmosdb create \ --resource-group <your-resource-group-name> \ --name <your-azure-COSMOS-DB-name-in-lower-case-letters> \ --kind GlobalDocumentDB
Pobierz klucze usługi Azure Cosmos DB, zapisz wartość
primaryMasterKey
do późniejszego użycia.az cosmosdb keys list \ --resource-group <your-azure-group-name> \ --name <your-azure-COSMOSDB-name>
Lokalne kompilowanie i uruchamianie aplikacji
Poniższa procedura umożliwia uruchomienie aplikacji na komputerze deweloperskim.
W wybranej konsoli skonfiguruj zmienne środowiskowe przedstawione w poniższych sekcjach kodu przy użyciu informacji o połączeniu platformy Azure i usługi Azure Cosmos DB zebranych wcześniej w tym artykule. Musisz podać unikatową nazwę WEBAPP_NAME i wartość zmiennych REGION.
W przypadku systemu Linux (powłoka 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>
W przypadku systemu Windows (wiersz polecenia):
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>
Uwaga
Jeśli chcesz aprowizować te zmienne za pomocą skryptu, w katalogu .prep znajduje się szablon dla powłoki Bash, który możesz skopiować, aby używać go jako punktu początkowego.
Zmień katalog przy użyciu następującego polecenia:
cd initial/spring-todo-app
Uruchom lokalnie aplikację Spring Todo za pomocą następującego polecenia:
mvn package spring-boot:run
Po uruchomieniu aplikacji możesz zweryfikować wdrożenie, korzystając z aplikacji Spring Todo tutaj:
http://localhost:8080/
.
Wdrażanie w usłudze App Service w systemie Linux
Poniższa procedura służy do wdrażania aplikacji w systemie Linux na platformie Azure.
Otwórz wcześniej skopiowany plik pom.xml do katalogu initial/spring-todo-app repozytorium. Upewnij się, że wtyczka Maven dla usługi aplikacja systemu Azure jest uwzględniona w poniższym pliku pom.xml. Jeśli wersja nie jest ustawiona na 1.14.0, zaktualizuj wartość.
<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>
Wdrażanie w środowisku Java SE w usłudze App Service dla systemu Linux
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] ------------------------------------------------------------------------
Przejdź do aplikacji internetowej działającej w środowisku Java SE w usłudze App Service dla systemu Linux:
https://<WEBAPP_NAME>.azurewebsites.net
Rozwiązywanie problemów z aplikacją Spring Todo na platformie Azure z pomocą przeglądania dzienników
Poniższa procedura otwiera pliki dzienników na platformie Azure.
Skonfiguruj dzienniki dla wdrożonej aplikacji internetowej Java w usłudze Azure App Service w systemie Linux:
az webapp log config \ --name ${WEBAPP_NAME} \ --resource-group ${RESOURCEGROUP_NAME} \ --web-server-logging filesystem
Otwórz zdalny strumień dzienników aplikacji internetowej Java z poziomu komputera lokalnego:
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.
Skalowanie w poziomie aplikacji Spring Todo
Aby przeskalować aplikację, wykonaj poniższą procedurę.
Skalowanie aplikacji internetowej w języku Java przy użyciu interfejsu wiersza polecenia platformy Azure:
az appservice plan update \ --number-of-workers 2 \ --name ${WEBAPP_PLAN_NAME} \ --resource-group ${RESOURCEGROUP_NAME}
Następne kroki
- Java in App Service Linux dev guide (Przewodnik dla deweloperów dotyczący języka Java w usłudze App Service dla systemu Linux)
- Azure for Java Developers (Platforma Azure dla deweloperów języka Java) Aby dowiedzieć się więcej na temat oprogramowania Spring i platformy Azure, przejdź do centrum dokumentacji dotyczącej oprogramowania Spring na platformie Azure.
Zobacz też
Aby uzyskać więcej informacji o korzystaniu z aplikacji Spring Boot na platformie Azure, zobacz następujące artykuły:
Wdrażanie aplikacji Spring Boot w systemie Linux w usłudze aplikacja systemu Azure Service
Running a Spring Boot Application on a Kubernetes Cluster in the Azure Container Service (Uruchamianie aplikacji Spring Boot w klastrze Kubernetes w usłudze Azure Container Service)
Aby uzyskać więcej informacji na temat korzystania z platformy Azure przy użyciu języka Java, zapoznaj się z tematami Platforma Azure dla deweloperów języka Java oraz Praca z narzędziami Azure DevOps i językiem Java.
Platforma Spring jest rozwiązaniem open-source, które pomaga deweloperom języka Java tworzyć aplikacje na poziomie przedsiębiorstwa. Jednym z bardziej popularnych projektów opartych na tej platformie jest Spring Boot, który oferuje uproszczoną metodę tworzenia autonomicznych aplikacji Java. Aby ułatwić deweloperom rozpoczęcie pracy z aplikacją Spring Boot, pod adresem https://github.com/spring-guides/ udostępniono przykładowe pakiety aplikacji Spring Boot. Oprócz możliwości wyboru z listy podstawowych projektów Spring Boot narzędzie Spring Initializr pomaga deweloperom rozpocząć tworzenie niestandardowych aplikacji Spring Boot.