搭配 Azure Cosmos DB for Apache Cassandra API 使用 Spring Data
本文將逐步引導您完成在Linux上的 Azure App Service 中建置、設定、部署、疑難解答和調整 Java Web 應用程式的程式。
它會示範下列元件的使用方式:
先決條件
若要遵循本文中的步驟,需要下列必要條件:
- 若要將 Java Web 應用程式部署至雲端,您需要 Azure 訂用帳戶。 如果您還沒有 Azure 訂用帳戶,您可以啟用 MSDN 訂閱者權益,或註冊 免費 Azure 帳戶。
- Azure CLI 2.0
- Java 8 JDK
- Maven 3
重要
需要 Spring Boot 2.5 版或更高版本,才能完成本文中的步驟。
複製範例 Java Web 應用程式存放庫
在此練習中,您將使用 Spring Todo 應用程式,這是使用 Spring Boot 建置的 Java 應用程式,適用於 Azure Cosmos DB 的 Spring Data,以及 Azure Cosmos DB。
複製 Spring Todo 應用程式,並複製 .prep 資料夾的內容,以初始化專案:
針對bash:
git clone --recurse-submodules https://github.com/Azure-Samples/e2e-java-experience-in-app-service-linux-part-2.git yes | cp -rf .prep/* .
針對 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
將目錄變更為複製存放庫中的下列資料夾:
cd initial\spring-todo-app
從 Azure CLI 建立 Azure Cosmos DB
下列程式會使用 CLI 建立 Azure Cosmos DB 資料庫。
登入您的 Azure CLI,並設定訂用帳戶標識碼。
az login
視需要設定訂用帳戶標識碼。
az account set -s <your-subscription-id>
建立 Azure 資源群組,並保留資源組名以供稍後使用。
az group create \ --name <your-azure-group-name> \ --location <your-resource-group-region>
建立 Azure Cosmos DB,並將類型指定為 GlobalDocumentDB。 Azure Cosmos DB 的名稱只能使用小寫字母。 請務必記下回應中的 [
documentEndpoint
] 欄位。 您稍後需要此值。az cosmosdb create \ --resource-group <your-resource-group-name> \ --name <your-azure-COSMOS-DB-name-in-lower-case-letters> \ --kind GlobalDocumentDB
取得您的 Azure Cosmos DB 金鑰,記錄
primaryMasterKey
值以供日後使用。az cosmosdb keys list \ --resource-group <your-azure-group-name> \ --name <your-azure-COSMOSDB-name>
在本機建置並執行應用程式
下列程式會在開發電腦上執行應用程式。
在您選擇的控制台內,使用您先前在本文中收集的 Azure 和 Azure Cosmos DB 連線資訊,設定下列程式碼區段中所示的環境變數。 您需要為 WEBAPP_NAME 和 REGION 變數提供唯一的名稱和值。
針對 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 的命令提示字元:
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>
注意
如果您想要使用文稿布建這些變數,您可以在 .prep 目錄中複製並使用作為起點的Bash範本。
使用下列命令變更目錄:
cd initial/spring-todo-app
使用下列命令在本機執行 Spring Todo 應用程式:
mvn package spring-boot:run
應用程式啟動之後,您可以在這裡存取 Spring Todo 應用程式來驗證部署:
http://localhost:8080/
。
部署至 App Service Linux
下列程式會將應用程式部署至 Azure 上的 Linux。
請開啟您先前複製到存放庫的 初始/spring-todo-app 目錄中的 pom.xml 檔案。 請確定 Azure App Service 的
Maven 外掛程式包含在下列 pom.xml 檔案中。 如果版本未設定為 1.14.0,請更新值。<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>
在 App Service Linux 中部署至 Java SE
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] ------------------------------------------------------------------------
流覽至在 App Service Linux 中 Java SE 上執行的 Web 應用程式:
https://<WEBAPP_NAME>.azurewebsites.net
藉由檢視記錄對 Azure 上的 Spring Todo 應用程式進行疑難解答
下列程式會在 Azure 上開啟記錄檔。
在 Linux 的 Azure App Service 中設定已部署 Java Web 應用程式的記錄:
az webapp log config \ --name ${WEBAPP_NAME} \ --resource-group ${RESOURCEGROUP_NAME} \ --web-server-logging filesystem
從本機電腦開啟 Java Web 應用程式遠端記錄資料流:
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.
擴展 Spring Todo 應用程式
使用下列程序來擴展應用程式。
使用 Azure CLI 向外延展 Java Web 應用程式:
az appservice plan update \ --number-of-workers 2 \ --name ${WEBAPP_PLAN_NAME} \ --resource-group ${RESOURCEGROUP_NAME}
後續步驟
- App Service Linux 開發人員指南中的 Java
- 適用於 Java 開發人員的 Azure 若要深入瞭解 Spring 和 Azure,請繼續前往 Azure 上的 Spring 檔中心。
另請參閱
如需在 Azure 上使用 Spring Boot 應用程式的詳細資訊,請參閱下列文章:
如需搭配 Java 使用 Azure 的詳細資訊,請參閱 適用於 Java 開發人員的 Azure,以及 使用 Azure DevOps 和 Java。
Spring Framework 是開放原始碼解決方案,可協助 Java 開發人員建立企業級應用程式。 建置於該平臺之上的其中一個較受歡迎的專案是 Spring Boot,其提供建立獨立 Java 應用程式的簡化方法。 為了協助開發人員開始使用 Spring Boot,https://github.com/spring-guides/提供數個範例 Spring Boot 套件。 除了從基本 Spring Boot 專案清單中選擇之外,Spring Initializr 可協助開發人員開始建立自定義 Spring Boot 應用程式。