建置 Spring Boot 微服務
在本課程模組中,我們將建置一個啟用雲端功能的 Spring Boot 微服務。 其會使用 Spring Cloud 服務登錄和 Spring Cloud 設定伺服器,這兩者都受到 Azure Spring 應用程式所管理和支援。
此微服務會使用 Spring Data JPA 從適用於 MySQL 的 Azure 資料庫資料庫讀取和寫入資料:
- Azure Spring 應用程式會自動將該資料庫繫結至我們的服務。
- 適用於 MySQL 的 Azure 資料庫是在 Azure 上執行的 MySQL 完全受控版本。
在 Azure Spring 應用程式上建立應用程式
在 Azure Spring 應用程式執行個體中建立特定的 todo-service
應用程式:
az spring app create --name todo-service --resource-group "$RESOURCE_GROUP_NAME" --service "$SPRING_CLOUD_NAME" --runtime-version Java_17
建立 MySQL 資料庫
現在請建立適用於 MySQL 的 Azure 資料庫:
az mysql server create \
--name ${SPRING_CLOUD_NAME}-mysql \
--resource-group "$RESOURCE_GROUP_NAME" \
--sku-name B_Gen5_1 \
--storage-size 5120 \
--admin-user "spring"
這項作業可能需要幾分鐘,而且會輸出 JSON 文件:請複製該文件中的密碼屬性,稍後會用到。
現在,在該伺服器中建立 todos 資料庫,並開放其防火牆,以便 Azure Spring 應用程式存取:
az mysql db create \
--name "todos" \
--server-name ${SPRING_CLOUD_NAME}-mysql
az mysql server firewall-rule create \
--name ${SPRING_CLOUD_NAME}-mysql-allow-azure-ip \
--resource-group "$RESOURCE_GROUP_NAME" \
--server ${SPRING_CLOUD_NAME}-mysql \
--start-ip-address "0.0.0.0" \
--end-ip-address "0.0.0.0"
此作業完成後,您就可以查看在您為此研討會建立的資源群組中所建立的內容。
將 MySQL 資料庫繫結至應用程式
Azure Spring 應用程式可以自動將我們建立的 MySQL 資料庫繫結至我們的微服務。
瀏覽至您的 Azure Spring 應用程式執行個體。
選取應用程式。
選取 [todo-service] 應用程式。
選取 [服務連接器],然後選擇 [+ 建立]。
- 針對 [服務類型],選取 [DB for MySQL 單一伺服器]。
- 指定一個連接名稱,例如 mysql_todos。
- 確認已顯示正確的訂用帳戶。
- 選擇在上述步驟中所建立的 MySQL 伺服器。
- 選取稍早所建立的 MySQL 資料庫。
- 選取 [SpringBoot] 作為 [用戶端類型]。
- 選取底部的 [下一步:驗證] 按鈕。
在 [驗證] 頁面上,確認已選取 [連接字串]。
選取 [繼續使用...資料庫認證],並填寫使用者名稱和密碼欄位。 使用者名稱為 "spring",而密碼是我們稍早複製的密碼屬性。
注意
如果您忘記密碼,您可以使用
az mysql server update -n ${SPRING_CLOUD_NAME}-mysql -g "$RESOURCE_GROUP_NAME" -p <new-password>
來重設密碼確認已選取 [設定防火牆規則以啟用對目標服務的存取權]。
按一下 [下一步:檢閱 + 建立]。
在 [驗證通過] 訊息出現之後,選取 [建立] 按鈕以建立服務連接器。
建立 Spring Boot 微服務
現在我們已佈建 Azure Spring 應用程式執行個體並設定好服務繫結,接下來我們要取得程式碼以讓 todo-service
就緒。
為了建立微服務,我們會使用 https://start.spring.io 與命令列:
curl https://start.spring.io/starter.tgz -d type=maven-project -d dependencies=web,mysql,data-jpa,cloud-eureka,cloud-config-client -d baseDir=todo-service -d bootVersion=3.1.5.RELEASE -d javaVersion=17 | tar -xzvf -
注意
我們使用 Spring Web
、MySQL Driver
、Spring Data JPA
、Eureka Discovery Client
和 Config Client
元件。
使用 Spring Data JPA 新增 Spring 程式碼以管理資料
在 DemoApplication
類別旁建立 Todo
JPA 項目:
package com.example.demo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Todo {
public Todo() {
}
public Todo(String description, boolean done) {
this.description = description;
this.done = done;
}
@Id
@GeneratedValue
private Long id;
private String description;
private boolean done;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public boolean isDone() {
return done;
}
public void setDone(boolean done) {
this.done = done;
}
}
然後,建立 Spring Data JPA 存放庫以管理此項目,稱為 TodoRepository
:
package com.example.demo;
import org.springframework.data.jpa.repository.JpaRepository;
public interface TodoRepository extends JpaRepository<Todo, Long> {
}
新增名為 TodoController
的 Spring MVC 控制器,以完成此應用程式的編碼:
package com.example.demo;
import org.springframework.web.bind.annotation.*;
import javax.annotation.PostConstruct;
import java.util.Arrays;
@RestController
public class TodoController {
private final TodoRepository todoRepository;
public TodoController(TodoRepository todoRepository) {
this.todoRepository = todoRepository;
}
@PostConstruct
public void init() {
todoRepository.saveAll(Arrays.asList(
new Todo("First item", true),
new Todo("Second item", true),
new Todo("Third item", false)));
}
@GetMapping("/")
public Iterable<Todo> getTodos() {
return todoRepository.findAll();
}
}
設定 Spring Boot 以建立資料庫資料表
為在部署應用程式時自動產生資料庫資料表,請將這一行程式碼新增至您的 src/main/resources/application.properties
設定檔:
spring.jpa.hibernate.ddl-auto=create-drop
部署應用程式
您現在可以建置您的 todo-service 專案,並將其傳送至 Azure Spring 應用程式:
cd todo-service
./mvnw clean package -DskipTests
az spring app deploy --name todo-service --service "$SPRING_CLOUD_NAME" --resource-group "$RESOURCE_GROUP_NAME" --artifact-path target/demo-0.0.1-SNAPSHOT.jar
cd ..
如果您想要在有失敗發生時檢查應用程式的記錄,則可以使用 az spring app logs
命令:
az spring app logs --name todo-service --service "$SPRING_CLOUD_NAME" --resource-group "$RESOURCE_GROUP_NAME" -f
在雲端中測試專案
應用程式已部署完成,接下來可以開始測試了!
- 在 Azure 入口網站中,前往您 Azure Spring 應用程式執行個體中的 [應用程式]。
- 確認 todo-service 的 [註冊狀態] 顯示為 0/1。 此資訊顯示其已在 Spring Cloud 服務登錄中正確完成註冊。
- 選取 [todo-service] 以取得微服務的詳細資訊。
- 複製/貼上所提供的「測試端點」。
您現在可以使用 cURL 來測試端點。 測試命令看起來應該像這樣:
curl https://primary:XXXXXXXXXXXXXXXXXXXXXXXXXXXXX@azure-spring-cloud-workshop.test.azuremicroservices.io/todo-service/default/
此命令的結果應是之前插入 MySQL 資料庫的三個項目:
[{"id":"1","description":"First item","done":true},{"id":"2","description":"Second item","done":true},{"id":"3","description":"Third item","done":false}]