Java秒杀系统实战系列构建SpringBoot多模块项目

33次阅读

共计 3983 个字符,预计需要花费 10 分钟才能阅读完成。

摘要 :本篇博文是“Java 秒杀系统实战系列文章”的第二篇,主要分享介绍如何采用 IDEA,基于 SpringBoot+SpringMVC+Mybatis+ 分布式中间件构建一个多模块的项目,即“秒杀系统”!。

内容 :传统的基于 IDEA 构建 SpringBoot 的项目,是直接借助 Spring Initializr 插件进行构建,但是这种方式在大部分情况下,只能充当“单模块”的项目,并不能很好的做到“分工明确、职责清晰”的分层原则!

故而为了能更好的管理项目代码以及尽量做到“模块如名”,快速定位给定的类文件或者其他文件的位置,下面我们将基于 IDEA、借助 Maven 构建多模块的项目,其中,其构建的思路如下图所示:

![图片上传中 …]

详细的构建过程在本文就不赘述了!文末有提供源码的地址以及构建过程的视频教程!下面重点介绍一下跟“Java 秒杀系统”相关的构建步骤。

(1)如下图所示为最终构建成功的项目的整体目录结构:

从该目录结构中可以看出,该项目为一个“聚合型项目”,其中,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<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 秒杀系统”的整体实战之路!

补充
1、目前,这一秒杀系统的整体构建与代码实战已经全部完成了,完整的源代码数据库地址可以来这里下载:https://gitee.com/steadyjack/… 记得 Fork 跟 Star 啊!!!

2、实战期间有任何问题都可以留言或者与 Debug 联系、交流;Debug 的微信:debug0868 Debug 的 QQ:1948831260

正文完
 0