Java | 創(chuàng)建一個 Spring Boot 單體項目都需要做什么

創(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

spring_assistant.png

到這里,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&amp;useUnicode=true&amp;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 種方式使用

  1. 命令行工具
  2. Java API 調用
  3. Maven 插件使用
  4. 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

參考

  1. http://mybatis.org/generator/
  2. https://flywaydb.org/
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蜕着,隨后出現(xiàn)的幾起案子谋竖,更是在濱河造成了極大的恐慌,老刑警劉巖承匣,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蓖乘,死亡現(xiàn)場離奇詭異,居然都是意外死亡韧骗,警方通過查閱死者的電腦和手機嘉抒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袍暴,“玉大人些侍,你說我怎么就攤上這事≌#” “怎么了岗宣?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長览徒。 經(jīng)常有香客問我狈定,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任纽什,我火速辦了婚禮措嵌,結果婚禮上,老公的妹妹穿的比我還像新娘芦缰。我一直安慰自己企巢,他們只是感情好,可當我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布让蕾。 她就那樣靜靜地躺著浪规,像睡著了一般。 火紅的嫁衣襯著肌膚如雪探孝。 梳的紋絲不亂的頭發(fā)上笋婿,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天,我揣著相機與錄音顿颅,去河邊找鬼缸濒。 笑死,一個胖子當著我的面吹牛粱腻,可吹牛的內容都是我干的庇配。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼绍些,長吁一口氣:“原來是場噩夢啊……” “哼捞慌!你這毒婦竟也來了?” 一聲冷哼從身側響起柬批,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤啸澡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后萝快,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锻霎,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年揪漩,在試婚紗的時候發(fā)現(xiàn)自己被綠了旋恼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡奄容,死狀恐怖冰更,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情昂勒,我是刑警寧澤蜀细,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站戈盈,受9級特大地震影響奠衔,放射性物質發(fā)生泄漏谆刨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一归斤、第九天 我趴在偏房一處隱蔽的房頂上張望痊夭。 院中可真熱鬧,春花似錦脏里、人聲如沸她我。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽番舆。三九已至,卻和暖如春矾踱,著一層夾襖步出監(jiān)牢的瞬間恨狈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工呛讲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拴事,地道東北人。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓圣蝎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親衡瓶。 傳聞我的和親對象是個殘疾皇子徘公,可洞房花燭夜當晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內容