开源组件开发,抱着学习的态度,采用的都是新技术,刚开始在这些新技术的使用上面踩了很多坑,通过一段时间的学习与实践,发现新技术的蓬勃发展并不是偶然,而是由于它真的能知足日益增加的新需求。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
,未能进入到容器内部的命令行,目前未解决,待之后完善。
沉舟侧畔千帆过,病树前头万木春。 今日听君歌一曲,暂凭杯酒长精神。 ——刘禹锡《酬乐天扬州初逢席上见赠》