1. 程式人生 > >[springboot 開發單體web shop] 1. 前言介紹和環境搭建

[springboot 開發單體web shop] 1. 前言介紹和環境搭建

前言介紹和環境搭建

簡述

springboot 本身是為了做服務化用的,我們為什麼要反其道使用它來開發一份單體web應用呢?
在我們現實的開發工作中,還有大量的業務系統使用的是單體應用,特別是對於中小型團隊來說,在專案開發之初選擇服務化開發是得不償失的,因為對於此類團隊,勢必所有的工作都是需要我們開發人員來做的,例如:

  • 技術選型
  • 業務需求分析
  • 業務需求設計
  • 大量的測試
  • 執行部署
  • 運營健康監控
  • ...

小團隊或小公司如果開發人員把大規模的精力放在除業務之外的工作中,那麼我們的開發效率勢必會特別低下,等我們系統開發一個版本出來,也許此類需求已經不是那麼符合當前的發展了,此類團隊追求的是短平快並且方便部署更新。有人就會問,那我們又為什麼不選擇SpringMVC

呢? 當然如果團隊中本身已經有成型的一套SpringMVC的框架可以拿來即用,當然也是完全ok的,但是所有使用過Springboot的同學都知道。

  1. Springboot幫我們把以前在SpringMVC中需要使用XML來配置的configuration內建化了,開發人員完全可以把大量精力放在業務鑽研優化上面而不需要關注它是如何配置的。
  2. 作為技術選型來說,一定要想到我們的業務也許會高速擴張,在後期我們得能快速更新技術體系或者升級系統,那麼springboot的本能服務化就可以體現出來了。
  3. 很多的新同學在學習springboot的時候,太多的資料本身是一種demo的學習,是需要大家進一步研究之後學以致用,不太貼近生產,我希望通過此次開發,可以直接開發一套可以生產使用的demo系統。

業務分析

在開發任何一個系統的時候,我們要實現的是一套電商平臺,那麼我們首先要考慮一個基本的電商平臺都包含哪些業務功能?

上圖展示了要實現一個電商最簡單的模組資訊。

技術選型

在技術選型的時候,個人建議遵循幾點原則:

  1. 切合業務實際需要(任何脫離了業務的技術都是廢柴)
  2. 團隊人員能力(要符合團隊成員的實際情況,否則上手會很慢)
  3. 技術社群活躍度(選擇高活躍的技術對於後期排錯相當重要,更為重要的是大部分錯誤已經被別人試過了...)
  4. 安全性(必不可少的選擇)
  5. 可參考 Poc之後,我選擇放棄OSGI

我們主題很明確的表明了要使用springboot 來實現一個web 專案,那麼抓住這兩個關鍵的點。

既然使用Springboot, 我們這裡使用最新的版本2.2.0.RELEASE, 既然是web專案,那麼必然要使用到web相關的技術,tomcat(springboot內建),並且我們採取前後端分離的技術來開發,後端提供restful 的api, 前端使用jquery & vuejs, 既然是一個真實專案,資料庫當然也是我們必不可少的,我們使用MYSQL 8.0+,那麼我們java要和db進行互動,我們使用mybatis作為bridge. 基本的技術已經足夠我們使用了,那麼具體依賴的package 後續會給大家一一介紹.

  • SpringBoot 2.2.0.RELEASE
  • Mysql 8.0.18
  • Mybatis 3.4.6

開發工具

工預善其事必先利其器, 以下是個人工具選擇,僅供參考:

  • IntelliJ IDEA (code tools)
    • Free Mybatis Plugin (幫助我們方法和SQL跳轉)
    • Lombok (使用註解節省太多的codes,提升效率)
    • Maven Helper(幫助依賴分析)
    • Restful Toolkit(可以實現和postman一樣的簡單效果,同時還能幫助我們生成一部分測試資訊)
    • ...其他外掛就人各有志啦~
  • Mysql Workbench(Mysql tools)
  • PDman (資料庫設計工具,指令碼的版本控制很好用哦)

Talk is cheap, show me the codes

說的再多,都不如來點實在的,那麼我們接下來開始我們的表演吧.

建立單體專案結構

首先我們需要建立一個Maven的parent module, 用來將我們所有的模組資訊都放在一起,如service,controller 等等.

Create Parent Module expensive-shop

  • 開啟IDEA,選擇File => New => Project

  • 點選Next,分別輸入GroupId & artifactId

  • 點選Next,修改project name(不改也沒有關係)

  • 點選Finish

此時,會生成srcpom.xml, 因為該專案為父類專案,不會有code實現,因此,刪除src目錄,並修改pom.xml 檔案.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.0.RELEASE</version>
        <relativePath/>
    </parent>
    <groupId>com.life-runner</groupId>
    <artifactId>expensive-shop</artifactId>
    <version>1.0-SNAPSHOT</version>

    <name>expensive-shop</name>
    <description>develop a on-line shop</description>

    <packaging>pom</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--spring預設使用yml中的配置,有時候要用傳統的xml或properties配置,就需要使用spring-boot-configuration-processor-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <!--監控端點依賴-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
        </dependency>
    </dependencies>
</project>

主要關注2點:
1.修改packaging 為pom, 表明是一個父類集合
2.引入parent節點為我們的springboot,這裡是設定整個project的springboot 相關依賴以及版本管控
從上述中,在該節點設定version 為 2.2.0.RELEASE之後, 下面所有的grouporg.springframework.boot的依賴項都沒有顯示的設定版本資訊.

Create child module

和建立父類專案一樣的建立過程,依次建立我們需要用到的child modules, 完成後如下圖:

經過上述環節,相信大家已經可以創建出我們專案所需要的架構環境了,下一次我們將開始實際業務的編碼實現.
gogo