Java高并发秒杀系统API是来源于网上教程的一个Java项目,也是我接触Java的第一个项目。原本是一枚c#码农,公司计划部分业务转java,因而我利用业务时间自学Java才有了本文,原本接触之初听别人说,c#要转java很容易,我也信了,可是真正去学习的时候仍是踩了无数个坑,好在朋友有几个作安卓的,向他们讨教了一些经验,可是他们作安卓的和web又是两个方向,因而继续一我的默默采坑避雷之旅,首先上手的是下面这个Java高并发秒杀系统API。html
学习java的初衷一个是公司转行,二是本身也想学学看,增长下技术的厚度,多了解下不一样编程语言,不一样实现方式。融会贯通,才能打通任督二脉。以前也看过python的东西,可是兴趣不大,Java毕竟生态很好,各类大神不少,每一个语言也有不一样的优缺点,多了解有利于自身发展。java
关于这个秒杀系统园子已经有几位大神写过了相关的文章,其实本不想献丑的,权且看成学习笔记看吧,重点讲的是在这个系统之上集成swagger和AdminLTE,为何集成它们呢,由于我已经在c#.net项目里面作过相关的内容, ABP+AdminLTE+Bootstrap Table权限管理系统一期 ,哈哈,自我营销一下,有兴趣的朋友能够看一下顺便点个赞再走? 原本觉得swagger ui和AdminLTE集成会很简单的,可是动手去作的时候发现了不少问题,因为我以前就是抱着先写一个web项目再说的初衷去作的,作完以后确实发现了不少问题,其实最重要的问题就是基础不牢,地动山摇,写完这篇文章以后,我决定要重基础学着来,深度学习一下。包括但不限于像tomcat,servlet,Webservice,MyBatis,Maven,spring,spring boot,spring cloud。python
废话很少说,开整。关于Java开发环境的配置我就不扯了,网上教程一大堆,说下Maven的配置,首先去官网下载http://maven.apache.org/download.cgi git
而后win+R快捷键cmd进入dos窗口,输入命令,mvn -v(注意中间有个空格),回车运行后能够看见maven版本maven home表示安装成功github
最后在命令行中输入如下命令:mvn archetype:generate -DgroupId=cn.codingxiaxw.seckill -DartifactId=seckill -Dpackage=cn.codingxiaxw.seckill -Dversion=1.0-SNAPSHOT -DarchetypeArtifactId=maven-archetype-webapp 注意下图中的两个回车,开始我就等了很久没有反应,查看项目没有, 这里的回车大概意思是默认DgroupId和DartifactId。 web
接下来配置tomcat. spring
配置好了打开 localhost:8080就能看到相关效果,这里要注意一个大坑,特别的初入Java朋友,以下图。apache
总是报无效标记的错误。网上找了大圈都不符合个人错误。最后我下载了jdk1.8版本就解决了,问题就是idea 和jdk 9.0在项目中出现冲突了。问题解决了我也没有去深究,估计还有其余问题。当时各类问题排除了,代码检查了N遍,万万没想到是jdk的错误。编程
而后就是配置pom.xml,代码很长我就不贴出来了,直接去个人github pom.xml看吧:https://github.com/Jimmey-Jiang/seckill/blob/master/seckill/pom.xml,这里包含了后面要说的swaggerui 的引入。 json
接下来就是跟着教程一步一步的写。包括dto,entity,dao,service,web,控制器,视图,test测试类,jsp的编写。具体我就不说了,去个人github上clone下来打开看看就明白了,或者去看教程吧。
编写完效果以下。
其余的代码教程上有,最后重点讲一下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"/>
复制代码
若是上述操做准确无误的话,那么你将会看到以下界面:
AdminLTE 引入就更简单了,不须要jar包,只须要引入静态资源就能够了。 因此就不作累述了,须要的能够clone项目来看下。