Java高併發秒殺系統API之SSM框架整合swagger與AdminLTE

安與生發表於2018-01-25

初衷與整理描述

Java高併發秒殺系統API是來源於網上教程的一個Java專案,也是我接觸Java的第一個專案。本來是一枚c#碼農,公司計劃部分業務轉java,於是我利用業務時間自學Java才有了本文,本來接觸之初聽別人說,c#要轉java很容易,我也信了,但是真正去學習的時候還是踩了無數個坑,好在朋友有幾個做安卓的,向他們討教了一些經驗,但是他們做安卓的和web又是兩個方向,於是繼續一個人默默採坑避雷之旅,首先上手的是下面這個Java高併發秒殺系統API。

學習java的初衷一個是公司轉行,二是自己也想學學看,增加下技術的厚度,多瞭解下不同程式語言,不同實現方式。融會貫通,才能打通任督二脈。之前也看過python的東西,但是興趣不大,Java畢竟生態很好,各種大神很多,每個語言也有不同的優缺點,多瞭解有利於自身發展。

關於這個秒殺系統園子已經有幾位大神寫過了相關的文章,其實本不想獻醜的,權且當作學習筆記看吧,重點講的是在這個系統之上整合swagger和AdminLTE,為什麼整合它們呢,因為我已經在c#.net專案裡面做過相關的內容, ABP+AdminLTE+Bootstrap Table許可權管理系統一期 ,哈哈,自我營銷一下,有興趣的朋友可以看一下順便點個贊再走? 本來以為swagger ui和AdminLTE整合會很簡單的,但是動手去做的時候發現了很多問題,由於我之前就是抱著先寫一個web專案再說的初衷去做的,做完之後確實發現了很多問題,其實最重要的問題就是基礎不牢,地動山搖,寫完這篇文章之後,我決定要重基礎學著來,深度學習一下。包括但不限於像tomcat,servlet,Webservice,MyBatis,Maven,spring,spring boot,spring cloud。

上手

廢話不多說,開整。關於Java開發環境的配置我就不扯了,網上教程一大堆,說下Maven的配置,首先去官網下載http://maven.apache.org/download.cgi

image.png
image.png
然後是系統變數的配置
image.png
Path配置
image.png

然後win+R快捷鍵cmd進入dos視窗,輸入命令,mvn -v(注意中間有個空格),回車執行後可以看見maven版本maven home表示安裝成功

Maven 自動生成專案

最後在命令列中輸入以下命令:mvn archetype:generate -DgroupId=cn.codingxiaxw.seckill -DartifactId=seckill -Dpackage=cn.codingxiaxw.seckill -Dversion=1.0-SNAPSHOT -DarchetypeArtifactId=maven-archetype-webapp 注意下圖中的兩個回車,開始我就等了好久沒有反應,檢視專案沒有, 這裡的回車大概意思是預設DgroupId和DartifactId。

image.png

image.png
然後開啟上面命令列中的地址,看到如下檔案內容說明專案生成成功。

image.png
IDEA開啟並不全專案結構如下。
image.png

接下來配置tomcat.

image.png

image.png

配置好了開啟 localhost:8080就能看到相關效果,這裡要注意一個大坑,特別的初入Java朋友,如下圖。

image.png

老是報無效標記的錯誤。網上找了大圈都不符合我的錯誤。最後我下載了jdk1.8版本就解決了,問題就是idea 和jdk 9.0在專案中出現衝突了。問題解決了我也沒有去深究,估計還有其他問題。當時各種問題排除了,程式碼檢查了N遍,萬萬沒想到是jdk的錯誤。

pom.xml與github地址

然後就是配置pom.xml,程式碼很長我就不貼出來了,直接去我的github pom.xml看吧:https://github.com/Jimmey-Jiang/seckill/blob/master/seckill/pom.xml,這裡包含了後面要說的swaggerui 的引入。

image.png

基礎業務編寫

接下來就是跟著教程一步一步的寫。包括dto,entity,dao,service,web,控制器,檢視,test測試類,jsp的編寫。具體我就不說了,去我的github上clone下來開啟看看就明白了或者去看教程吧

image.png

初步效果

編寫完效果如下。

image.png

image.png

swagger整合

其他的程式碼教程上有,最後重點講一下swagger的整合。 首先當然是去下載swagger,然後引入專案,然後修改index.html裡面的url為http://localhost:8080/api-docs。

image.png

pom引入jar包。Swagger獲取api後是以json形式返回資料給Swagger ui,這裡需要引入jackson的相關包

    <!--swagger-->
    <dependency>
      <groupId>com.mangofactory</groupId>
      <artifactId>swagger-springmvc</artifactId>
      <version>1.0.2</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.4.4</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.4.4</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.4.4</version>
    </dependency>
複製程式碼

建config包,然後新建SwaggerConfig配置類

package org.seckill.config;

/**
 * Created by jiangcy on 2018/1/23.
 */

import com.mangofactory.swagger.configuration.SpringSwaggerConfig;
import com.mangofactory.swagger.models.dto.ApiInfo;
import com.mangofactory.swagger.plugin.EnableSwagger;
import com.mangofactory.swagger.plugin.SwaggerSpringMvcPlugin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@EnableSwagger
@EnableWebMvc
public class SwaggerConfig {
    private SpringSwaggerConfig springSwaggerConfig;
    /**
     * Required to autowire SpringSwaggerConfig
     */
    @Autowired
    public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig)
    {
        this.springSwaggerConfig = springSwaggerConfig;
    }
    /**
     * Every SwaggerSpringMvcPlugin bean is picked up by the swagger-mvc
     * framework - allowing for multiple swagger groups i.e. same code base
     * multiple swagger resource listings.
     */
    @Bean
    public SwaggerSpringMvcPlugin customImplementation()
    {
        return new SwaggerSpringMvcPlugin(this.springSwaggerConfig)
                .apiInfo(apiInfo())
                .includePatterns(".*?");

    }

    private ApiInfo apiInfo()
    {
        ApiInfo apiInfo = new ApiInfo(
                "Swagger測試",
                "測試查詢使用者",
                "開發者: Changxin L",
                "348686686@gmail.com",
                "MIT License",
                "/LICENSE");
        return apiInfo;
    }
}
複製程式碼

然後我們在配置類裡面配置一下靜態資源的對映路徑。

image.png

    <!-- 將 springSwaggerConfig載入到spring容器 -->
    <bean     class="com.mangofactory.swagger.configuration.SpringSwaggerConfig" />
    <!-- 將自定義的swagger配置類載入到spring容器 -->
    <bean class="org.seckill.config.SwaggerConfig" />
    
    <mvc:resources mapping="/swagger/**" location="/WEB-INF/swagger/"/>

    <!-- 定義無需Controller的url<->view直接對映 -->
    <mvc:view-controller path="/" view-name="../WEB-INF/swagger/index"/>
複製程式碼

swagger 效果

如果上述操作準確無誤的話,那麼你將會看到如下介面:

image.png

AdminLTE 以其他

AdminLTE 引入就更簡單了,不需要jar包,只需要引入靜態資源就可以了。 所以就不做累述了,需要的可以clone專案來看下。

image.png

image.png

image.png

image.png

image.png

image.png

相關文章