天天看點

spring initializr腳手架搭建詳解

作者:楊同學technotes

前段時間,我在「基于start.spring.io,我實作了Java腳手架定制」一文中講述了敝司的微服務腳手架落地過程中的前世今生,并提到了基于 spring initializr 的搭建了 2.0 版本的腳手架。今天我打算和你分享一下這其中的實作過程與細節,項目已經開源在 Github 上。

start-parent:https://github.com/studeyang/start-parent

歡迎 star

1、項目結構介紹

項目分為 initializr、start-client、start-site 三個部分,重要部分說明如下。

start-parent
  |- initializr                    代碼生成
    |- initializr-actuator
    |- initializr-bom
    |- initializr-docs
    |- initializr-generator         生成基礎工程代碼
    |- initializr-generator-spring  生成 spring 工程代碼
    |- initializr-generator-test    單元測試的封裝
    |- initializr-generator-zebra   生成 zebra 分層架構
    |- initializr-metadata          工程中繼資料(pom 相關定義)
    |- initializr-parent
    |- initializr-service-sample
    |- initializr-version-resolver  版本解析
    |- initializr-web
  |- start-client                   腳手架前端
  |- start-site                     腳手架後端           

工程間的依賴關系圖我作了簡化,圖示如下。

spring initializr腳手架搭建詳解

依賴關系圖

了解了項目的整體情況,下面請跟随我的思路,一起将工程搭建起來。

2、內建Gitlab

如果你想使用項目中的「建立工程」功能,則需要進行此步驟的配置。這裡我以gitlab.com為例,介紹如何完成與 Gitlab 的內建。

首先需要讓 Gitlab 信任我們的應用,以完成後面的登入授權跳轉。在 Gitlab 平台配置腳手架應用。

spring initializr腳手架搭建詳解

添加Applications

這裡我配置了本地開發環境的 Redirect URI,如果後續需要部署到伺服器,則應該配置腳手架伺服器的後端位址。

spring initializr腳手架搭建詳解

Application ID

配置完成後,Gitlab 就将我們的應用記錄了下來,并配置設定了 Application ID 和 Secret,這兩個字段值我們需要配置到 start-site application.yml 檔案中:

security:
  base-url: https://gitlab.com
  authorization-uri: ${security.base-url}/oauth/authorize
  token-uri: ${security.base-url}/oauth/token
  user-info-uri: ${security.base-url}/api/v4/user
  redirect-uri: http://127.0.0.1:8081/oauth/redirect
  client-id: gitlab client id
  client-secret: gitlab client secret
  admin:
    name: your gitlab admin username
    password: your gitlab admin password           

這裡我簡單介紹一下相關字段,authorization-uri, token-uri, user-info-uri 這三個字段是固定的,不需要配置。

  • • base-url:如果你使用gitlab管理項目,base-url可以設定成你搭建的gitlab位址;
  • • redirect-uri:gitlab 認證後跳轉的位址,這裡使用了後端來接收跳轉,因為跳轉會攜帶 code 參數,避免暴露在浏覽器,提高安全性;
  • • client-id:gitlab 配置設定的 Application ID;
  • • client-secret:gitlab 配置設定的 Secret;
  • • admin.name:gitlab 的賬号,用于建立工程,并将初始的工程代碼送出,建議配置管理者賬号;
  • • admin.password:gitlab 的賬号密碼;

3、添加元件

接下來添加元件依賴。這裡我以casslog-spring-boot-starterJar 包為例,如果該元件僅支援部分版本的 SpringBoot,那可以配置 compatibility-range,例如:

compatibility-range: "[1.4.2.RELEASE,1.5.7.RELEASE]"           

完整的配置如下。

initializr:
  dependencies:
    - name: 開源基礎設施
      bom: kmw
      repository: my-rep
      content:
        - name: Casslog
          id: casslog
          groupId: io.github.studeyang
          artifactId: casslog-spring-boot-starter
          description: 日志工具類
          starter: true
          compatibility-range: "[1.4.2.RELEASE,1.5.7.RELEASE]"
          links:
            - rel: guide
              href: {使用者手冊}
              description: Example 快速開始
            - rel: reference
              href: {參考文檔}           

配置dependencies。

  • • 「name」元件依賴類别的名稱,例如:開源基礎設施
  • • 「bom」該類别下的依賴包管理庫
  • • 「repository」該類别下的依賴包所屬倉庫
  • • 「content」具體的依賴包

配置content。

  • • 「name」依賴包名稱
  • • 「id」依賴包唯一辨別(代碼中使用)
  • • 「groupId」依賴包 groupId
  • • 「artifactId」依賴包 artifactId
  • • 「description」依賴包 description
  • • 「starter」是否是 spring-boot-starter
  • • 「compatibility-range」依賴的 springboot 版本
  • • 「links」元件的使用文檔

配置好的效果圖如下。

spring initializr腳手架搭建詳解

元件添加效果圖

4、部署應用

下面就可以将腳手架部署到伺服器上了。

這裡提醒一下,記得修改 Gitlab 的 redirect-uri 為腳手架伺服器的位址。

4.1 步驟一:工程打包

# 打包前端工程
cd {projectRoot}/start-client
sh ../mvnw install

# 打包 initializr 項目
cd {projectRoot}/initializr
sh ../mvnw clean install -Dmaven.test.skip=true

# 打包 start-site
cd {projectRoot}/start-site
sh ../mvnw clean install -Dmaven.test.skip=true           

4.2 步驟二:打 Docker 鏡像

cd {projectRoot}/start-site
docker build -t start-site:0.0.1 .           

運作鏡像即可。效果圖如下。

spring initializr腳手架搭建詳解

腳手架主界面

5、使用腳手架的正确姿勢

5.1 通過HELP.md管理使用文檔

在「3、添加元件」過程中所配置的文檔連結将會在 HELP.md 檔案中展示,示意圖如下:

spring initializr腳手架搭建詳解

HELP.md

5.2 儲存/分享工程

你配置好的工程可以通過「分享...」功能儲存下來。

spring initializr腳手架搭建詳解

分享

5.3 在IDEA中使用腳手架

可在 IDEA 中快速建立工程,隻需要配置好腳手架伺服器位址即可。需要注意的是社群版的 IDEA 是沒有這個功能的。

spring initializr腳手架搭建詳解

IDEA

小結

本文向你介紹了 Spring Initializr 腳手架的搭建過程,如果你在此過程中遇到了問題,可以提 ISSUE 或者在公衆号「楊同學technotes」背景給我留言。