本文將逐步引導您完成在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 應用程式庫
這個練習可以使用 Spring Todo 應用程式,這是一個使用 Spring Boot、Spring Data for Azure Cosmos DB 以及 Azure Cosmos DB 建置的 Java 應用程式。
複製 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 帳戶
以下程序是利用 Azure CLI 建立 Azure Cosmos DB 帳號。
登入 Azure CLI 並設定你的訂閱 ID。
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>注意
如果你想用腳本配置這些變數,目錄裡有 Bash
.prep的範本可以複製並作為起點。使用下列命令變更目錄:
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 服務 的
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 服務 中配置已部署的 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 應用程式。