初衷与整理描述
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
然后是系统变量的配置
Path 配置
然后 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.
然后打开上面命令行中的地址,看到如下文件内容说明项目生成成功.
IDEA 打开并不全项目结构如下.
接下来配置 tomcat.
配置好了打开 localhost:8080 就能看到相关效果,这里要注意一个大坑,特别的初入 Java 朋友,如下图.
老是报无效标记的错误.网上找了大圈都不符合我的错误.最后我下载了 jdk1.8 版本就解决了,问题就是 idea 和 jdk 9.0 在项目中出现冲突了.问题解决了我也没有去深究,估计还有其他问题.当时各种问题排除了,代码检查了 N 遍,万万没想到是 jdk 的错误.
pom.xml
然后就是配置 pom.xml, 代码很长我就不贴出来了,直接去我的 github pom.xml 看吧: https://github.com/Jimmey-Jiang/seckill/blob/master/seckill/pom.xml,这里包含了后面要说的 swaggerui 的引入.
基础业务编写
接下来就是跟着教程一步一步的写.包括 dto,entity,dao,service,web, 控制器,视图,test 测试类,jsp 的编写.具体我就不说了, 去我的 github 上 clone 下来打开看看就明白了 , 或者去看教程吧 .
初步效果
编写完效果如下.
swagger 集成
其他的代码教程上有,最后重点讲一下 swagger 的集成.
首先当然是去 下载 swagger , 然后引入项目, 然后修改 index.html 里面的 url 为 http://localhost:8080/api-docs.
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;
}
}
然后我们在配置类里面配置一下静态资源的映射路径.
<!-- 将 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 效果
如果上述操作准确无误的话,那么你将会看到如下界面:
AdminLTE 以其他
AdminLTE 引入就更简单了,不需要 jar 包,只需要引入静态资源就可以了.
所以就不做累述了,需要的可以 clone 项目来看下.
github
github 地址: https://github.com/Jimmey-Jiang/seckill
来源: https://www.cnblogs.com/anyushengcms/p/8350973.html