商城模块java_Java商城秒杀系统实战系列~构建SpringBoot多模块项目
摘要:本篇博文是“Java秒杀系统实战系列文章”的第二篇,主要分享介绍如何采用IDEA,基于SpringBoot+SpringMVC+Mybatis+分布式中间件构建一个多模块的项目,即“秒杀系统”!。
内容:传统的基于IDEA构建SpringBoot的项目,是直接借助Spring Initializr插件进行构建,但是这种方式在大部分情况下,只能充当“单模块”的项目,并不能很好的做到“分工明确、职责清晰”的分层原则!
故而为了能更好的管理项目代码以及尽量做到“模块如名”,快速定位给定的类文件或者其他文件的位置,下面我们将基于IDEA、借助Maven构建多模块的项目,其中,其构建的思路如下图所示:
image
详细的构建过程在本文就不赘述了!文末有提供源码的地址以及构建过程的视频教程!下面重点介绍一下跟“Java秒杀系统”相关的构建步骤。
(1)如下图所示为最终构建成功的项目的整体目录结构:
image
从该目录结构中可以看出,该项目为一个“聚合型项目”,其中,model模块依赖api模块,server模块依赖model模块,层层依赖!最终在server模块实现“大汇总”,即server模块为整个项目的核心关键所在,像什么“配置文件”、“入口启动类”啥的都在这个模块中!
而且,各个模块的职责是不一样的,分工也很明确,就像model模块,一般人看了就知道这里放的东西应该是跟mybatis或者跟数据库mysql相关的类文件与配置文件等等。
构建好相应的模块之后,就需要往相应的模块添加依赖,即只需要在pom.xml中加入相应的依赖即可,在这里就不贴出来了!
(2)在这里主要贴一下server模块入口启动类MainApplication的代码,如下所示:
@SpringBootApplication
@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 {
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秒杀系统(端口跟上下文是自己设置的!),可以观察响应信息,如下所示:
image
(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秒杀系统”的整体实战之路!
补充
1、目前,这一秒杀系统的整体构建与代码实战已经全部完成了,完整的源代码数据库地址可以来这里下载:https://gitee.com/steadyjack/SpringBoot-SecondKill 记得Fork跟Star啊!!!
商城模块java_Java商城秒杀系统实战系列~构建SpringBoot多模块项目相关推荐
- java 模块 分工_Java秒杀系统实战系列~构建SpringBoot多模块项目
摘要:本篇博文是"Java秒杀系统实战系列文章"的第二篇,主要分享介绍如何采用IDEA,基于SpringBoot+SpringMVC+Mybatis+分布式中间件构建一个多模块的项 ...
- Java秒杀系统实战系列~构建SpringBoot多模块项目
摘要:本篇博文是"Java秒杀系统实战系列文章"的第二篇,主要分享介绍如何采用IDEA,基于SpringBoot+SpringMVC+Mybatis+分布式中间件构建一个多模块的项 ...
- java设计前期工作基础和存在的困难_Java秒杀系统实战系列-基于Redisson的分布式锁优化秒杀逻辑...
本文是"Java秒杀系统实战系列文章"的第十五篇,本文我们将借助综合中间件Redisson优化"秒杀系统中秒杀的核心业务逻辑",解决Redis的原子操作在优化秒 ...
- ieee39节点系统介绍_Java秒杀系统实战系列-基于ZooKeeper的分布式锁优化秒杀逻辑...
本文是"Java秒杀系统实战系列文章"的第十六篇,本文我们将继续秒杀系统的优化之路,采用统一协调调度中心中间件ZooKeeper控制秒杀系统中高并发多线程对于共享资源~代码块的并发 ...
- sql判断时间大于0点_Java秒杀系统实战系列-数据库级别Sql的优化与代码的调整
本文是"Java秒杀系统实战系列文章"的第十三篇,从本篇文章开始我们将进入"秒杀代码优化"环节,本文将首先从数据库级别Sql的优化入手,结合调整秒杀相关的部分核 ...
- Java秒杀系统实战系列~RabbitMQ死信队列处理超时未支付的订单(转)
转自: https://juejin.cn/post/6844903903130042376 文末有源代码,非常棒 摘要: 本篇博文是"Java秒杀系统实战系列文章"的第十篇,本篇 ...
- java 秒杀代码_Java秒杀系统实战系列~商品秒杀代码实战
摘要: 本篇博文是"Java秒杀系统实战系列文章"的第六篇,本篇博文我们将进入整个秒杀系统核心功能模块的代码开发,即"商品秒杀"功能模块的代码实战. 内容: & ...
- sql取系统时间减一小时_Java秒杀系统实战系列-整体业务流程介绍与数据库设计...
本篇文章是"Java秒杀系统实战系列文章"的第三篇,本文将主要介绍秒杀系统的整体业务流程,并根据相应的业务流程进行数据库设计,最终采用Mybatis逆向工程生成相应的实体类Enti ...
- Java秒杀系统实战系列~商品秒杀代码实战
摘要: 本篇博文是"Java秒杀系统实战系列文章"的第六篇,本篇博文我们将进入整个秒杀系统核心功能模块的代码开发,即"商品秒杀"功能模块的代码实战. 内容: & ...
最新文章
- Python matplotlib可视化:用Matplotlib的bar_label函数为条形图添加数值标记(在每一个条形的外侧顶部)
- python经典案例-Python经典实例
- [应用][js+css3]3D盒子导航[PC端]
- juniper路由器主备路由引擎主机名配置
- 洛谷 - P2754 [CTSC1999]家园(最大流+并查集)
- 【JavaWeb】前端框架之Bootstrap
- 正则表达式知识详解(转自晴天碧日)
- Struts2访问Servlet的三种方式
- ZooKeeper学习第四期---构建ZooKeeper应用
- 对“车库咖啡的网络现状改造”的一点个人看法
- sort()函数与升序、降序
- 《学习之道》第四章学习方法16学会做标记,而不是只划线
- Ubuntu 环境变量文件介绍
- Matlab 边界提取
- 实验1:局域网的组建与配置
- Simulink转化为低版本文件
- css改变透明背景png图片的图标颜色
- Qt5Core上的CMake错误
- 抖音算法推荐机制详解
- 图片底部边距清除代码
热门文章
- Redis和Memcache的区别是什么
- 《Unity 游戏案例开发大全》一6.5 游戏主场景
- openssh配置终极一帖
- sql 70-229 考试样题(1)
- OBS源代码阅读笔记
- redux rxjs_可观察的RxJS和Redux入门指南
- node aws 内存溢出_如何使用Node.js和AWS快速创建无服务器RESTful API
- 辍学的名人_我辍学去追求成为网络开发人员和设计师的梦想
- 编码中统一更该变量的快捷键_流媒体的7种方式使您成为更好的编码器
- android 模板方法模式,安卓设计模式(七)模板方法模式