開源組件開發,抱着學習的態度,採用的都是新技術,剛開始在這些新技術的使用上面踩了很多坑,通過一段時間的學習與實踐,發現新技術的蓬勃發展並不是偶然,而是由於它真的能知足日益增加的新需求。html
持久層:MyBatisjava
過去一直使用Hibernate
進行開發,以爲Hibernate
雖然在性能上差一些,但開發效率極高;可是在用了MyBatis
一段時間後發現,當SQL
寫熟練了以後,開發效率也不低,更況且還有強大的開源社區與豐富的IDE
插件。mysql
以前一直討厭XML
,致使一直沒有啓用MyBatis
,最近通過與大廠的交流才發現,CSDN
上所說的XML
更適合複雜查詢之類的觀點都是扯淡。git
向最佳實踐看齊:簡單語句使用註解,複雜語句使用Provider
拼SQL
,再見,XML
。github
項目構建:Gradlespring
在進行多模塊項目構建時,從spring-framework
中學到了很多東西,一樣也借鑑了它的構建工具Gradle
。sql
剛開始還分不清楚java-library
、runtimeOnly
、api
、implementation
這些Gradle
中的新概念,但在使用一段時間後,發現Gradle
真的是天生適合多模塊複雜項目構建,用起來十分方便。docker
CI:Github Actionsshell
Github Actions
公測有一段時間了,本次的CI
就採用Github Actions
。數據庫
來瞅瞅,在Pull Request
旁邊的這個Actions
就是咱們的CI
工具Github Actions
。
咱們能夠自定義CI
的工做流,Github
自動在特定事件發生時觸發CI
。
在倉庫根目錄建立文件.github/workflows/workflow.yml
,咱們可在此文件中配置自定義工做流。
具體的語法細節就不做詳述了,可參考如下兩篇文章:
GitHub Actions 入門教程 - 阮一峯的網絡日誌
Workflow syntax for GitHub Actions - Github Help
任務分爲兩種,一種是run
定義,註明要執行什麼腳本;另外一種使用uses
定義,使用Github
中已有的開源第三方腳本。
# 定義 CI 工做流 name: Java CI Workflow # 在 push / pull request 到 master分支時觸發 on: push: branches: - master pull_request: branches: - master # 定義工做任務 jobs: build: # 配置 build 工做 name: Project Test And Build # 運行於 ubuntu-latest 操做系統 runs-on: ubuntu-latest # 定義任務執行步驟 steps: # 檢出當前倉庫代碼 - name: Checkout code uses: actions/checkout@v2 # 關閉默認 MySQL - name: Shutdown default mysql run: sudo service mysql stop # 建立數據庫 - name: Create mysql database auth uses: icomponent/mysql-action@master with: VERSION: 5.7 CONTAINER_NAME: mysql PORT_MAPPING: 3307:3306 ROOT_PASSWORD: root DATABASE: auth # 安裝 JDK - name: Install jdk 1.8 uses: actions/setup-java@v1 with: java-version: 1.8 # 數據庫遷移及各模塊測試 - name: Flyway module migration database run: gradle flyway:bootRun - name: Test core module run: gradle core:test - name: Test common module run: gradle common:test - name: Test auth module run: gradle auth:test - name: Test app module run: gradle app:test
一切看起來還不錯,使用起來方便快捷。
在進行工做流的配置過程當中,發現Github Actions
中,若是使用Docker Service
,Github
在工做流會自動初始化容器。
看起來很智能,但若是想對容器進行自定義配置就不那麼方便了。
端口衝突問題:Github Actions
提供的默認MySQL
沒法使用(忘了爲啥不能用了,好像是隨機密碼的問題?),若是鏡像也在3306
端口映射,會發生端口衝突,但願在關閉默認MySQL
後,手動啓用Docker
容器。
容器自定義配置問題:正常一個MySQL
容器只有一項數據庫的配置,若是想在一個Docker
容器內建立多個數據庫,就須要對容器進行自定義配置。可是Github Actions
在初始化容器時,使用隨機名稱,致使沒法對容器執行自定義腳本。
基於以上問題,開發了本身的開源Action
腳本。
最開始覺得有多複雜,後來發現不過是一個shell
腳本,將自定義的輸入變量拼接到指定位置,拼接成完整docker
命令,再去執行。
拼接Docker
命令時參照李宜衡的文章:Docker初戰 - 笙歌會停,總結得很詳細,具備極高參考價值。
很遺憾,架子搭好了,可是目前未實現容器的自定義腳本功能,Github
一直報錯:the input device is not a TTY
,未能進入到容器內部的命令行,目前未解決,待之後完善。
沉舟側畔千帆過,病樹前頭萬木春。 今日聽君歌一曲,暫憑杯酒長精神。 ——劉禹錫《酬樂天揚州初逢席上見贈》