Spring Modulith在 Spring Boot 應(yīng)用中實(shí)現(xiàn)邏輯模塊
Spring Modulith 支持開(kāi)發(fā)人員在 Spring Boot 應(yīng)用程序中實(shí)現(xiàn)邏輯模塊,它允許應(yīng)用結(jié)構(gòu)驗(yàn)證、記錄模塊安排、為單個(gè)模塊運(yùn)行集成測(cè)試、在運(yùn)行時(shí)觀察模塊交互,以及以松散耦合的方式實(shí)現(xiàn)模塊交互。
Spring Modulith 項(xiàng)目引入了新的類(lèi)和注釋但不生成代碼,它的模塊不使用 Java 平臺(tái)模塊系統(tǒng) (JPMS),而是映射到純 Java 包。模塊有一個(gè) API,但 Spring Modulith 鼓勵(lì)使用 Spring 應(yīng)用程序事件作為“交互的主要方式”,這些事件可以自動(dòng)保存到事件日志中。
簡(jiǎn)單的說(shuō),Spring Modulith提供一套工具,可以消息傳遞的方式來(lái)實(shí)現(xiàn)同一個(gè) monolithic 服務(wù)內(nèi)部的跨模塊調(diào)用(而不是直接互相調(diào)用 API)。
Spring Modulith 基于 Spring Boot 3.0、Framework 6、Java 17 和 JakartaEE 9 ,它是 Moduliths 項(xiàng)目的繼承者,后者使用 Spring Boot 2.7,但現(xiàn)已停用,在 2023 年 11 月之前僅接受錯(cuò)誤修復(fù)。
快速開(kāi)始
-
在https://start.spring.io上創(chuàng)建一個(gè) Spring Boot 應(yīng)用程序
-
創(chuàng)建一個(gè) Java 包安排,將業(yè)務(wù)模塊作為應(yīng)用程序主包的直接子包。
□ Example └─ □ src/main/java ├─ □ example <1> | └─ Application.java ├─ □ example.inventory <2> | └─ … └─ □ example.order <2> └─ …-
應(yīng)用程序根包
-
應(yīng)用模塊包
-
-
創(chuàng)建
ApplicationModules模型、運(yùn)行驗(yàn)證并創(chuàng)建文檔片段。class ApplicationTests { @Test void writeDocumentationSnippets() { var modules = ApplicationModules.of(Application.class).verify(); (1) new Documenter(modules) (2) .writeModulesAsPlantUml() .writeIndividualModulesAsPlantUml(); } }-
創(chuàng)建應(yīng)用程序模塊模型并驗(yàn)證其結(jié)構(gòu)。
-
將Asciidoctor片段(組件圖、應(yīng)用程序模塊畫(huà)布)渲染到
target/modulith-docs.
-
-
為各個(gè)應(yīng)用程序模塊運(yùn)行集成測(cè)試。
□ Example └─ □ src/test/java └─ □ example.order └─ OrderModuleIntegrationTests.java@ApplicationModuleTests class OrderModuleIntegrationTests { @Test void someTestMethod() { … } }
