創(chuàng)建一個 Spring Boot 單體項目都需要做什么
Table of Contents
前言
平常開始新項目的時候喻旷,都要從頭搭建一個新項目,至于這些模板操作,我們都需要注意什么呢?這里主要介紹一個項目搭建的過程以及一些常用工具和插件的使用。
一捌斧、項目搭建
0. 準備工具
這里使用常見 IDEA 社區(qū)版
進行操作戈稿,以下統(tǒng)稱 IDEA 社區(qū)版
為 IDEA
.
IDEA 默認為不提供 Spring Boot
項目的創(chuàng)建方式的西土,在這里我們可以通過兩種方式創(chuàng)建項目
一、通過官網(wǎng)進行選擇下載后導入到IDEA中
官網(wǎng)地址是 https://start.spring.io/
, 如果網(wǎng)絡情況不好的情況下鞍盗,可以使用Alibaba 提供的網(wǎng)站 https://start.aliyun.com/bootstrap.html
, 其提供了更多的可選項
二需了、安裝插件
- Spring Assistant
- Alibaba Cloud Toolkit
如果你對阿里系產(chǎn)品有依賴的話可以安裝 Alibaba Cloud Toolkit
, 其不僅提供了創(chuàng)建Spring Boot 項目的方式跳昼,也提供了 Dubbo 的快捷方式,同時還附件一些云產(chǎn)品操作功能肋乍,很是方便
這里作者并沒有一些阿里云服務的資源和 Dubbo 的使用情況鹅颊,這里安裝了相對輕便的 Spring Assistant
到這里,IDEA 社區(qū)版就可以便捷的創(chuàng)建項目了
1. 選擇要用到的依賴
這里考慮到正常工作環(huán)境并不會急于升級 Spring Boot 2.4.0
, 這里使用選用 Java 8 + Spring Boot 2.3.6 + Maven
創(chuàng)建項目
創(chuàng)建時選擇以下依賴:
依賴 | 作用 |
---|---|
spring-boot-starter-actuator | 提供一些統(tǒng)計端口墓造,如健康檢查堪伍、info、mapping 等統(tǒng)計信息觅闽,配合 Spring Boot Admin 使用效果更佳 |
spring-boot-starter-web | web 項目相關自動配置 |
spring-boot-starter-data-redis | Spring Data Redis 自動配置帝雇,如果不使用,可以移除 |
mybatis-spring-boot-starter | mybatis 相關配置蛉拙,不使用可以移除 |
spring-boot-starter-jdbc | jdbc 相關配置尸闸,不使用可以移除 |
mysql-connector-java | mysql 的jdbc 驅動,可以換成其他的孕锄,mysql 使用還是挺廣泛的 |
lombok | 幫助簡化一些代碼吮廉,這個爭議還是挺大的,根據(jù)團隊意見酌情使用 |
2. 配置項目
1. 根據(jù)情況刪除不常用的文件或者根本不可能用的文件
- static 文件夾
- templates 文件夾
- mvnw 文件酌情刪除
- 改 properties 為 yml
2. 增加不同環(huán)境的配置文件
一般都會包括 開發(fā)硫惕、測試茧痕、生產(chǎn)三個配置,有個公司會更多比如預生產(chǎn)恼除、灰度之類的
- application.yml
- application-dev.yml
- application-prod.yml
- application-test.yml
3. 增加項目配置
在上面加入了 jdbc踪旷、redis 依賴,需要進行一些配置才能正常啟動, 這個根據(jù)情況配置一下
4. 增加日志配置
在項目中配置不同環(huán)境的日志輸出
通過上面的配置豁辉,我們的項目就可以啟動了令野,這也可以正常使用了,但這并沒有結束
其他配置
3. 配置跨域
如果項目被前端項目直接訪問徽级,還得配置對應的跨域气破,最省事的方式是實現(xiàn) WebMvcConfigurer
@Configuration
public class WebAppConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry
.addMapping("/**")
.allowedOrigins("*") // 這里替換成對應的域名
.allowCredentials(true)
.allowedHeaders("*") // 這里是請求頭
.allowedMethods("*"); // 這里是方法
}
}
更多配置跨域的方式可以參考 Java 解決跨域問題
4. 配置 MyBatis
在使用 mybatis 時,可以增加一些插件和個性化配置來簡化一下操作, 比如啟動駝峰轉換餐抢、增加分頁插件和MBG代碼生成
1. 開始下劃線轉駝峰
mybatis:
configuration:
map-underscore-to-camel-case: true
2. 增加分頁插件
添加 PageHelper Spring Boot Starter
引入依賴
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
在 application.yml
增加分頁配置
pagehelper:
helper-dialect: mysql
reasonable: true
support-methods-arguments: true
params: count=conutSql
3. 配置 MBG
官網(wǎng)地址:http://mybatis.org/generator/
1. 增加插件
在 pom.xml
中配置 mybatis-generator-maven-plugin
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.4.0</version>
<configuration>
<configurationFile>generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build>
增加 generatorConfig.xml
文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC
"-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<classPathEntry location="/Users/zhangyunan/.m2/repository/mysql/mysql-connector-java/5.1.9/mysql-connector-java-5.1.9.jar"/>
<context id="mysql" targetRuntime="MyBatis3">
<!-- 這個插件可以方式重新生成 mapper 文件時现使,采用追加而不是覆蓋的問題 -->
<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection
connectionURL="jdbc:mysql://127.0.0.1:3306/spring-boot-example?characterEncoding=UTF-8&useUnicode=true&serverTimezone=GMT%2B8"
driverClass="com.mysql.jdbc.Driver"
password="123456" userId="root"/>
<javaModelGenerator targetPackage="com.example.structure.infrastructure.entity" targetProject="./src/main/java"/>
<sqlMapGenerator targetPackage="com.example.structure.infrastructure.mapper" targetProject="./src/main/resources"/>
<javaClientGenerator targetPackage="com.example.structure.infrastructure.mapper" targetProject="./src/main/java"
type="XMLMAPPER"/>
<table tableName="sys_dict_type"/>
<table tableName="sys_dict"/>
</context>
</generatorConfiguration>
在執(zhí)行之前記得先創(chuàng)建表
CREATE TABLE `sys_dict_type` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`code` varchar(20) NOT NULL COMMENT '編碼',
`name` varchar(20) NOT NULL COMMENT '名稱',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='字典類型表';
CREATE TABLE `sys_dict` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type_code` varchar(20) NOT NULL COMMENT '類型code',
`code` varchar(20) NOT NULL COMMENT 'key',
`value` varchar(100) NOT NULL COMMENT '值',
`description` varchar(30) DEFAULT NULL COMMENT '描述',
`sort` int(11) DEFAULT '0' COMMENT '排序',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='字典表';
5. 配置 flyway
在開發(fā)過程中,不僅在項目創(chuàng)建的時候會創(chuàng)建表或者修改數(shù)據(jù)庫結構旷痕,在需求變更碳锈、增加時也會不會的修改數(shù)據(jù)庫結構,如果不加以管理的話欺抗,會越來越亂售碳,在以往的開發(fā)中可能會創(chuàng)建一個叫 scheam.sql
的文件, 每次對數(shù)據(jù)庫的修改同時修改這個文件,這種處理方式是可行,但難以追蹤和管理贸人,總會有不實時更新文檔的情況發(fā)生.
這種情況可以通過 Flyway
來管理數(shù)據(jù)庫變更情況间景,使用這個方式保證各個環(huán)境的數(shù)據(jù)庫結構一致性
官網(wǎng)介紹為:
Version control for your database.
Robust schema evolution across all your environments.
With ease, pleasure and plain SQL.
Flyway 提供了 4 種方式使用
- 命令行工具
- Java API 調用
- Maven 插件使用
- Gradle 插件使用
這里介紹一下 Maven 插件使用
1. 在 pom.xml
加入
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>7.2.0</version>
<configuration>
<configFiles>
<configFile>flyway.conf</configFile>
</configFiles>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
</dependencies>
</plugin>
2. 在項目里面創(chuàng)建 flyway.conf
文件
flyway.url=jdbc:mysql://127.0.0.1:3306/spring-boot-example
flyway.user=root
flyway.password=123456
在不同環(huán)境執(zhí)行時,可以通過 -Dflyway.configFiles
來指定配置文件來區(qū)分測試環(huán)境艺智、生產(chǎn)環(huán)境
mvn -Dflyway.configFiles=xxx.conf flyway:migrate
3. 創(chuàng)建sql 文件
在 resources 下創(chuàng)建 db/migration
文件夾, 在這里面就是我們要寫的 DDL SQL 文件
更多操作見Flyway 官網(wǎng): https://flywaydb.org/
6. 配置 git id 插件
在開發(fā)中倘要,可能會出現(xiàn)測試環(huán)境發(fā)布的版本和自己通過 CI/CD 平臺發(fā)布的版本不一致的情況,或者明明改了代碼力惯,為什么測試/線上沒有生效呢碗誉?這是我們可以使用 git id
插件,幫我們查看部署的項目的版本信息
在 pom.xml
加入
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>4.0.3</version>
<executions>
<execution>
<goals>
<goal>revision</goal>
</goals>
</execution>
</executions>
<configuration>
<dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
</configuration>
</plugin>
這樣編譯和打包的文件中會生成一個 git.properties
文件父晶,這樣可以通過解壓jar包的方式查看這個文件
[圖片上傳失敗...(image-f64167-1614776928997)]
不過通過解壓 jar 包的方式還是有點 low 的,因為上面加入了 spring-boot-starter-actuator
可以通過 actuator/info
方式來查看 git.properties
信息
在 application.yml
加入
info:
version: 0.0.1
description: 項目搭建版本
啟動項目并訪問 actuator/info
則可看到如下信息弄跌,這樣就可以檢查項目運行的分支和具體的 commit id
{
"version": "0.0.1",
"description": "項目搭建版本",
"git": {
"commit": {
"time": "2020-11-15T07:59:05Z",
"id": "b36f324"
},
"branch": "main"
}
}
如果想查看 git 的更多信息甲喝,需要加入修改配置
management:
info:
git:
mode: full
使用IDEA直接啟動的項目的時候要保證target文件下已經(jīng)生成了
git.properties
, 如果沒有,可以執(zhí)行mvn complie
再運行或者使用mvn spring-boot:run
運行. 這個問題是 IDEA 的問題
7. 配置代碼格式
在團隊開發(fā)中铛只,如果每人都有自己代碼風格埠胖,這樣寫出來的代碼是不統(tǒng)一,甚至同一個文件多個人修改時容易反生上頭的感覺
這里可以一個統(tǒng)一的代碼風格文件淳玩,并導入IDEA, 這樣大家格式化化的風格就會一致
導入方式為
[圖片上傳失敗...(image-f546bd-1614776928997)]
樣例文件可以參考 https://github.com/zhangyunan1994/code-template/tree/master/template/styleguide 中 intellij-java-google-style.xml
8. 編寫 Readme
寫個關于模板項目使用的一些情況直撤,方便其他同時可以快速復制項目進行修改
總結
項目代碼地址為: https://github.com/zhangyunan1994/spring-boot-example