04 搭建秒杀项目骨架
04 搭建秒杀项目骨架
前言
前面我们已经把秒杀系统的功能和表设计好了,并且将商城系统中的用户数据同步到了Redis当中了。
接下来,我们开始正式开发秒杀系统。
今天先把项目骨架搭建好。
1 创建一个空项目
打开idea,在File菜单下选择New,下面选择Project:
会弹出下面这个窗口:
默认会勾选Spring。
我们这个项目直接引入SpringBoot,会自动引入相关的Spring的,因此这里取消Spring的勾选。
会弹出下面的窗口:
我们需要给该项目取一个名字,比如:susan_seckill,然后设置一个保存该项目的目录。
点击Finish按钮之后,会看到创建的项目:
这个空项目只引入JDK1.8的jar包,其他的基本上什么也没有,src目录下是空的。
2 被maven管理
上面创建的空项目,没有被maven管理,不太方便管理项目中的依赖。
接下来,需要被maven管理。
复制一个pom.xml文件到susan_seckill项目目录下:
右键pom.xml文件,选择 Add as Maven Project会将该项目变成maven项目。
之后,你会发现SpringBoot相关的依赖jar包,一次性导入到项目中了:
3 pom.xml文件
pom.xml文件可以在Gitee上看到,地址:https://gitee.com/dvsusan/susan_mall/blob/tag_001/pom.xml
其中上半部分,包含了下面几个比较重要的配置:

第一部分定义了jar包的groupId和artifactId,后面可以通过这两个id,可以从maven仓库中找到对应的jar包。
第二部分定义了项目的名称,在右边这里可以看到:
第三部分定义了parent,即父依赖。这里引入了spring-boot-starter-parent,版本是:2.7.18。
pom.xml文件的中间,引入了一些常用的jar包,比如:SpringBoot、hibernate等。
pom.xml文件的下半部分,包含了远程maven仓库的配置。
为了快速访问,这里使用了阿里云的远程仓库,从它里面下载相关依赖jar包。
当然这个pom.xml文件中,并非包含了苏三秒杀系统所有的依赖,有些依赖后面项目中用到再引入也不迟。
今天的第一步是把项目骨架搭建起来。
4 规划module
通过上面已经创建了一个空的SpringBoot的maven项目。
这个项目目前只有一个module。
但这个商城项目包含的功能和代码很多,我们需要对代码分层,让职责更单一,后面更好维护。
因此,需要将项目拆分成多个module。
选择项目susan_seckill右键,在窗口中选择:New -》 Module:
就可以创建module了,做法跟创建project类似,这里就不过多介绍了。
我们打算拆分成3个module:
- mall-business:包含业务代码,比如:Service层和Mapper层。
- mall-api:包含接口层。
- mall-job:包含job和mq消费者。
最关键的一步是在susan-seckill的pom.xml文件中,配置各个module:
这样在右边的窗口中,就会出现这些依赖:
此外,创建了sh目录和sql目录。
其中sh目录主要用于存放shell脚本,比如:后面项目部署的脚本。
而sql目录主要用于存放sql脚本。
5 规划代码目录
上面已经搭建了项目的基本骨架。
接下来,需要制定一些规范,规划各module项目下的代码目录。
这样,在后面开发的过程中,把代码按照严格的规范存放,就不会乱掉,方便后期的维护。
5.1 seckill-business
seckill-business这个模块的定位是包含业务逻辑,包含的东西比较多:
- config:存放配置类。
- entity:存放实体类。
- mapper:存放mapper接口。
- service:存放service类。
- util:存放工具类。
5.2 seckill-api
seckill-api这个模块的定位是接口层:
- auth:存放权限点常量类。
- config:存放配置类。
- controller:存放接口。
5.3 seckill-job
seckill-job这个模块的定位是job的客户端实现和mq消费者:
- consumer:存放mq消费者类。
6 启动应用
上面的这些准备工作做好之后,下面测试一下看看能否正常启动SpringBoot项目。
目前有两个应用服务:api和job。
api对应的seckill-api模块,而job对应的是seckill-job模块。
要想启动SpringBoot项目,必须增加一个main方法,并且添加SpringBoot的注解。
在seckill-api模块中增加ApiApplication类:
package cn.net.susan.seckill.api;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 秒杀系统API服务启动类
*
* @author 苏三,该项目是知识星球:java突击队 的内部项目
* @date 2024/6/24 下午4:57
*/
@SpringBootApplication
public class ApiApplication {
public static void main(String[] args) {
SpringApplication.run(ApiApplication.class, args);
}
}
然后在controler目录下创建一个TestController类:
/**
* @author 苏三,该项目是知识星球:java突击队 的内部项目
* @date 2024/1/3 下午3:59
*/
@RestController
@RequestMapping("")
public class TestController {
@GetMapping("/test")
public String test() {
return "success";
}
}
在浏览器上访问地址 http://localhost:8013/test
可以看到success返回,说明接口调用成功了。
当然为了让项目正常启动,还需要在application.yml文件中增加datasource,否则启动项目会失败。
spring:
application:
name: seckill-api
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/susan_mall?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull
username: root
password: 123456
server:
port: 8013
同样在seckill-job模块中增加JobApplication类:
package cn.net.susan.seckill.job;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 秒杀系统job服务启动类
*
* @author 苏三,该项目是知识星球:java突击队 的内部项目
* @date 2024/6/24 下午4:57
*/
@SpringBootApplication
public class JobApplication {
public static void main(String[] args) {
SpringApplication.run(JobApplication.class, args);
}
}
在application.yml文件中增加配置:
spring:
application:
name: seckill-job
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/susan_mall?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull
username: root
password: 123456
server:
port: 8014
至此,苏三秒杀系统完整的项目骨架已经基本搭建完成了。