SOFABoot 支持創建 Web 和 Core 兩種類型的工程。
Web 工程
通常用于需要 Web 頁面展現的應用。當用該工程類型開發一個 Web 程序時,相當于“基于 Spring Boot 的 Web 應用 + SOFA 中間件”進行開發。
結合中間件 SOFAREST 服務,可提供基于 JAX-RS(Java API for RESTful Web Services) 標準的前后端分離解決方案。
Core 工程:通常用于實現無頁面展現的后端服務。當使用 SOFABoot 開發一個 J2SE 程序(無 Web 頁面訪問),相當于“基于 Spring Boot 的非 Web 應用(無 servlet 依賴)+ SOFA 中間件” 進行開發。
下文將向您介紹如何創建工程,并對已創建工程的結構進行說明。
如何創建工程
本部分將向您介紹如何在本地使用 Maven 工具創建 SOFABoot Web 工程和 Core 工程。在開始創建前,請務必參考 前置條件,完成工程運行前的準備工作。
前置條件
為執行本文代碼示例,您需要首先搭建 SOFABoot 的運行環境。具體步驟詳見 搭建環境。
操作步驟
以操作系統管理員身份打開命令行工具,定位到需要創建工程的目錄,并運行以下命令:
如果使用的是 Maven 默認安裝目錄下的
settings.xml
,且已按照 搭建環境 中的要求,對原settings.xml
進行了覆蓋操作,則使用下述 Maven 命令進行創建。Web 工程:
mvn archetype:generate -DarchetypeGroupId=com.alipay.sofa -DarchetypeArtifactId=sofaboot-web-archetype -DarchetypeVersion=1.0-SNAPSHOT -DarchetypeCatalog=internal
Core 工程:
mvn archetype:generate -DarchetypeGroupId=com.alipay.sofa -DarchetypeArtifactId=sofaboot-core-archetype -DarchetypeVersion=1.0-SNAPSHOT -DarchetypeCatalog=internal
如果使用的是 Maven 自定義安裝目錄下的
settings.xml
,且已按照 搭建環境 中的要求,對原settings.xml
進行了覆蓋操作,則使用下述 Maven 命令進行創建。Web 工程:
mvn -s "custom_settings_path" archetype:generate -DarchetypeGroupId=com.alipay.sofa -DarchetypeArtifactId=sofaboot-web-archetype -DarchetypeVersion=1.0-SNAPSHOT -DarchetypeCatalog=internal
Core 工程:
mvn -s "custom_settings_path" archetype:generate -DarchetypeGroupId=com.alipay.sofa -DarchetypeArtifactId=sofaboot-core-archetype -DarchetypeVersion=1.0-SNAPSHOT -DarchetypeCatalog=internal
重要使用自定義路徑下的
settings.xml
時,請勿直接復制 Maven 命令,請把 “custom_settings_path” 替換為真實的文件路徑,例如:"C:\apache-maven-3.3.3\conf\settingsXXX.xml"
。
在執行過程中,會提示您輸入以下信息,可根據實際情況進行配置:
groupId
:是工程在 Maven 倉庫中的唯一標識,一般為公司域名或組織域名的反寫,如:com.yourCompanyName.sofa
。重要請按照開發規范創建自己的 groupId,避免在掃描配置時出現問題。
artifactId
:表示項目名稱或應用名稱,如:web-app
或core-app
。version
:版本號。默認為1.0-SNAPSHOT
。SNAPSHOT 意為快照,說明該項目還在開發中,是不穩定的版本。此處可維持默認值。package
:應用包名。此處可不填。說明groupId、artifactId、version 三個元素生成了一個 Maven 項目的基本坐標。
完成以上配置后,會向您再次確認信息。
輸入 Y,表示確認,繼續安裝;
輸入 N,表示取消,重新定義以上屬性。
屬性定義完成后,工程創建會繼續進行。當看到以下信息時,表示工程創建完成。
[INFO]------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO]------------------------------------------------------------------------ [INFO]Total time:28.298 s [INFO]Finished at:2018-01-10T23:36:19+08:00 [INFO]FinalMemory:15M/163M [INFO]------------------------------------------------------------------------
請移步 版本說明,查看最新的 SOFABoot 版本,然后在步驟 1 中定位的目錄中查看新建的工程文件夾(以 artifactId 命名),然后在工程根目錄下的主 pom.xml 中,修改
<parent>
標簽的版本號,示例如下:
工程結構說明
對于上面所創建的兩種 SOFABoot 兩種工程的目錄結構,現說明如下:
為了便于理解目錄結構,本文通過示例進行說明。示例工程所使用的依賴信息如下:
groupId:com.alipay.sofa
artifactId:APPNAME
Web 工程原型目錄
Web 工程模型默認生成 endpoint
和 web
兩個模塊:
endpoint
模塊:SOFAREST 的服務模塊,對外提供 SOFAREST 服務。web
模塊:包含 main 函數的啟動模塊,可以直接運行。另外,還包含全局配置文件、測試模塊和靜態資源等。
使用 Maven 命令創建的 Web 工程目錄結構如下:
├── app
│├── endpoint
││├── pom.xml
││└── src
││└── main
││├── java
│││└── com
│││└── alipay
│││└── APPNAME
│││└── endpoint => SOFAREST 實踐代碼
│││├── constants
││││├──RestConstants.java
││││└──URLConstants.java
│││├── exception
││││├──CommonException.java
││││└──SofaRestExceptionHandler.java
│││├── facade
││││└──SampleRestFacade.java
│││├── filter
││││└──CommonContainerResponseFilter.java
│││├── impl
││││└──SampleRestFacadeRestImpl.java
│││├── model
││││└──DemoUserModel.java
│││└── response
│││├──AbstractFacadeResp.java
│││└──RestSampleFacadeResp.java
││└── resources
││└── META-INF
││└── APPNAME
││└── APPNAME-endpoint.xml
│└── web
│├── pom.xml
│└── src
│├── main
││├── java
│││└── com
│││└── alipay
│││└── APPNAME
│││└──Slite2WebSpringBootApplication.java =>啟動函數
││└── resources
││├── META-INF
│││└── APPNAME =>Spring配置文件存放處,放到指定的 APPNAME 目錄下
│││└── APPNAME-web.xml
││├── config =>配置目錄,詳見「配置解決方案」
│││└── application.properties =>應用的日志配置文件
│││└── application-dev.properties
│││└── application-test.properties
││├── logback-spring.xml =>應用的日志配置文件
││└──static=> WEB 工程的靜態頁面存放處
││└── index.html
│└── test =>應用的測試模塊,內置啟動了SpringBoot,方便業務測試
│└── java
│└── com
│└── alipay
│└── APPNAME
│└── web
│└── test
│├──base
││└──AbstractTestBase.java
│└── usercases
│└──SofaRestServiceTest.java
└── pom.xml =>應用的Maven配置文件
默認情況下,靜態頁面都存放至
src/main/resources/static
目錄下以進行統一管理。SOFABoot 的全局屬性配置解決方案和日志配置解決方案,請參考 SOFABoot 技術棧的 技術棧使用指南。
應用的測試模塊,在
web
模塊的src/test/java
目錄下,測試用例包含一個測試基類(base)和一個測試類(usercases),測試類中啟動了 Spring Boot 進行 SOFAREST 的簡單功能測試。
Core 工程原型目錄
根據實際應用名稱,Core 工程模型會默認生成 {APPNAME}-facade
和 {APPNAME}-service
兩個模塊:
facade
模塊:定義應用的接口依賴包。service
模塊:包含 main 函數的啟動模塊,可以直接運行。另外,還包含全局配置文件和測試模塊。以groupId=com.alipay.sofa
、artifactId=APPNAME
為例,使用 Maven 命令創建的 Core 工程目錄結構如下:
├── APPNAME-facade
│├── pom.xml
│└── src =>當前應用用于分發給其他應用的接口依賴包
│└── main
│└── java
│└── com
│└── alipay
│└── APPNAME
│└── facade
│└──SampleService.java
├── APPNAME-service
│├── pom.xml
│└── src
│├── main
││├── java
│││└── com
│││└── alipay
│││└── APPNAME
│││├──Slite2SpringBootAPPNAMEApplication.java =>啟動函數
│││└── service
│││└──SampleServiceImpl.java
││└── resources
││├── META-INF
│││└── APPNAME =>Spring配置文件存放處,放到指定的 APPNAME 目錄下
│││└── APPNAME-service.xml
││├── config =>配置目錄,詳見「配置解決方案」
│││├── application-dev.properties
│││├── application-test.properties
│││└── application.properties
││└── logback-spring.xml =>應用的日志配置文件
│└── test =>應用的測試模塊,內置啟動了SpringBoot方便業務測試
│├── java
││└── com
││└── alipay
││└── APPNAME
││└── test
││├──base
│││└──AbstractTestBase.java
││└── usercases
││└──BeanTest.java
│└── resources
│└── test
│└── META-INF
│└── APPNAME
│└── test.xml
└── pom.xml =>應用的Maven配置文件
SOFABoot 的全局屬性配置解決方案和日志配置解決方案,請參考 SOFABoot 技術棧的 技術棧使用指南。 應用的測試模塊,在 service
模塊的 src/test/java
目錄下,測試用例包含一個測試基類(base)和一個測試類(usercases)。測試類中啟動了 Spring Boot 進行 bean 的簡單功能測試。