Java秒殺系統實戰系列~構建SpringBoot多模塊項目

摘要:本篇博文是「Java秒殺系統實戰系列文章」的第二篇,主要分享介紹如何採用IDEA,基於SpringBoot+SpringMVC+Mybatis+分佈式中間件構建一個多模塊的項目,即「秒殺系統」!。前端

 

內容:傳統的基於IDEA構建SpringBoot的項目,是直接藉助Spring Initializr插件進行構建,可是這種方式在大部分狀況下,只能充當「單模塊」的項目,並不能很好的作到「分工明確、職責清晰」的分層原則!mysql

 

故而爲了能更好的管理項目代碼以及儘可能作到「模塊如名」,快速定位給定的類文件或者其餘文件的位置,下面咱們將基於IDEA、藉助Maven構建多模塊的項目,其中,其構建的思路以下圖所示:git

 

 

 

 

 

 

 

詳細的構建過程在本文就不贅述了!文末有提供源碼的地址以及構建過程的視頻教程!下面重點介紹一下跟「Java秒殺系統」相關的構建步驟。spring

 

 

 

(1)以下圖所示爲最終構建成功的項目的總體目錄結構:   sql

 

 

 

 

 

 

 

從該目錄結構中能夠看出,該項目爲一個「聚合型項目」,其中,model模塊依賴api模塊,server模塊依賴model模塊,層層依賴!最終在server模塊實現「大彙總」,即server模塊爲整個項目的核心關鍵所在,像什麼「配置文件」、「入口啓動類」啥的都在這個模塊中!數據庫

 

 

 

並且,各個模塊的職責是不同的,分工也很明確,就像model模塊,通常人看了就知道這裏放的東西應該是跟mybatis或者跟數據庫mysql相關的類文件與配置文件等等。後端

 

 

 

構建好相應的模塊以後,就須要往相應的模塊添加依賴,即只須要在pom.xml中加入相應的依賴便可,在這裏就不貼出來了!api

 

 

 

 

(2)在這裏主要貼一下server模塊入口啓動類MainApplication的代碼,以下所示:瀏覽器

 

@SpringBootApplicationmybatis

@ImportResource(value = {"classpath:spring/spring-jdbc.xml"})

@MapperScan(basePackages = "com.debug.kill.model.mapper")

@EnableScheduling

public class MainApplication extends SpringBootServletInitializer{

 

    @Override

    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {

        return builder.sources(MainApplication.class);

    }

 

    public static void main(String[] args) {

        SpringApplication.run(MainApplication.class,args);

    }

}

 

 

 

其中,該啓動類將加載配置文件spring-jdbc.xml(數據庫連接信息的配置文件)!

 

 

 

構建完成以後,能夠將整個項目採用外置的Tomcat跑起來,運行過程當中,觀察控制檯Console的輸出信息,若是沒有報錯信息,則表明整個項目的搭建是沒有問題的!若是出現了問題,建議本身先研究一番並嘗試去解決掉!若是仍舊不能解決,能夠加文末提供的聯繫方式進行解決!

 

 

 

(4)除此以外,爲了讓整個項目在先後端分離開發的狀況下,先後端的接口交互更加規範(好比響應信息的規範等等),在這裏咱們採用了通用的一個狀態碼枚舉類StatusCode 跟 一個通用的響應結果類BaseResponse,用於後端在返回響應信息給到前端時進行統一封裝。

 

 

 

 

狀態碼枚舉類StatusCode的源代碼以下所示:

 

public enum StatusCode {

    Success(0,"成功"),

    Fail(-1,"失敗"),

    InvalidParams(201,"非法的參數!"),

    UserNotLogin(202,"用戶沒登陸"),

    ;

    private Integer code; //狀態碼code

    private String msg;  //狀態碼描述信息msg

 

    StatusCode(Integer code, String msg) {

        this.code = code;

        this.msg = msg;

    }

 

    public Integer getCode() {

        return code;

    }

    public void setCode(Integer code) {

        this.code = code;

    }

    public String getMsg() {

        return msg;

    }

    public void setMsg(String msg) {

        this.msg = msg;

    }

}

 

響應結果類BaseResponse的源代碼以下所示:

 

public class BaseResponse<T> {

    private Integer code; //狀態碼code

    private String msg;  //狀態碼對應的描述信息msg

    private T data; //響應數據

    public BaseResponse(Integer code, String msg) {

        this.code = code;

        this.msg = msg;

    }

    public BaseResponse(StatusCode statusCode) {

        this.code = statusCode.getCode();

        this.msg = statusCode.getMsg();

    }

    public BaseResponse(Integer code, String msg, T data) {

        this.code = code;

        this.msg = msg;

        this.data = data;

    }

    public Integer getCode() {

        return code;

    }

 

    public void setCode(Integer code) {

        this.code = code;

    }

    public String getMsg() {

        return msg;

    }

    public void setMsg(String msg) {

        this.msg = msg;

    }

    public T getData() {

        return data;

    }

    public void setData(T data) {

        this.data = data;

    }

}

 

 

 

在後面使用的過程當中,你們會發現,這個BaseResponse和StatusCode的結合使用會帶來很大的方便,並且,你們仔細觀察,會發現這種模式跟「HTTP的響應模型」很像!

 

 

 

 

(5)最後,爲了測試整個項目的可用性以及BaseResponse和StatusCode的使用,下面創建一個BaseController控制器,並在其中開發一個簡單的請求方法,以下所示:

 

 

 

@Controller

@RequestMapping("base")

public class BaseController {

    private static final Logger log= LoggerFactory.getLogger(BaseController.class);

    /**

     * 標準請求-響應數據格式

     */

    @RequestMapping(value = "/response",method = RequestMethod.GET)

    @ResponseBody

    public BaseResponse response(String name){

        BaseResponse response=new BaseResponse(StatusCode.Success);

        if (StringUtils.isBlank(name)){

            name="這是welcome!";

        }

        response.setData(name);

        return response;

    }

}

 

(6)將整個運行起來,若是控制檯沒有相應的報錯信息,則打開Postman,併發起相應的請求:http://localhost:8092/kill/base/response?name=Java秒殺系統 (端口跟上下文是本身設置的!),能夠觀察響應信息,以下所示:

 

 

 

 

 

 

 

(7)除此以外,這個Java秒殺系統項目還支持前端發起請求時,後端協助進行頁面的跳轉,其中本項目使用的模板引擎爲Jsp,跳轉後的頁面位於/WEB-INF/views/目錄下(這主要是經過在application.properties文件配置實現的)。

 

 

 

 

以下代碼爲在BaseController開發一個跳轉到welcome頁面的方法,其代碼以下所示:

 

/**

 * 跳轉頁面-跳轉成功攜帶 name 參數到 welcome頁面中

 * @param name

 * @param modelMap

 * @return

 */

@GetMapping("/welcome")

public String welcome(String name, ModelMap modelMap){

    if (StringUtils.isBlank(name)){

        name="這是welcome!";

    }

    modelMap.put("name",name);

    return "welcome";

}

 

 

 

(8)打開瀏覽器,訪問:http://localhost:8092/kill/base/welcome?name=Java秒殺系統 便可跳轉到相應的頁面!

 

至此,關於「Java秒殺系統」多模塊項目的構建已經完成了!值得一提的是,這一多模塊項目能夠適用於其餘任何SpringBoot業務的應用場景,能夠將其做爲一個奠定項目來使用。

 

 

 

 

接下來,咱們就能夠開始幹一些壞事了,即由此開啓「Java秒殺系統」的總體實戰之路!

 

 

 

補充

一、目前,這一秒殺系統的總體構建與代碼實戰已經所有完成了,完整的源代碼數據庫地址能夠來這裏下載:https://gitee.com/steadyjack/SpringBoot-SecondKill 記得Fork跟Star啊!!!

 

二、因爲相應的博客的更新可能並不會很快,故而若是有想要快速入門以及實戰整套系統的,能夠考慮購買這套系統對應的實戰視頻教程:https://www.roncoo.com/view/1146338929757712386

相關文章
相關標籤/搜索