02 搭建苏三商城项目骨架
02 搭建苏三商城项目骨架
前言
上一篇文章中介绍到苏三商城项目使用的主要功能和使用的一些技术。
这篇文章从0~1搭建一个SpringBoot项目,将苏三商城的项目骨架搭建好。
1 创建一个空项目
打开idea,在File菜单下选择New,下面选择Project:

会弹出下面这个窗口:

默认会勾选Spring。
我们这个项目直接引入SpringBoot,会自动引入相关的Spring的,因此这里取消Spring的勾选。
会弹出下面的窗口:

我们需要给该项目取一个名字,比如:susan_mall,然后设置一个保存该项目的目录。
点击Finish按钮之后,会看到创建的项目:

这个空项目只引入JDK1.8的jar包,其他的基本上什么也没有,src目录下是空的。
2 被maven管理
上面创建的空项目,没有被maven管理,不太方便管理项目中的依赖。
接下来,需要被maven管理。
复制一个pom.xml文件到susan_mall项目目录下:

右键pom.xml文件,选择 Add as Maven Project会将该项目变成maven项目。
之后,你会发现SpringBoot相关的依赖jar包,一次性导入到项目中了:

3 pom.xml文件
pom.xml文件的代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.net.susan</groupId>
<artifactId>susan-mall</artifactId>
<packaging>pom</packaging>
<version>1.0.0</version>
<modules>
<module>mall-common</module>
<module>mall-business</module>
<module>mall-mgt</module>
<module>mall-job</module>
</modules>
<name>susan-mall</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.18</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<jedis.version>3.3.0</jedis.version>
<swagger.version>3.0.0</swagger.version>
<fastjson.version>1.2.83</fastjson.version>
<druid.version>1.2.16</druid.version>
<hutool.version>5.5.7</hutool.version>
<poi.version>4.1.2</poi.version>
<commons-pool2.version>2.5.0</commons-pool2.version>
<mapstruct.version>1.2.0.Final</mapstruct.version>
<swagger-annotations.version>1.5.21</swagger-annotations.version>
<swagger-models.version>1.5.24</swagger-models.version>
<xerces.version>2.11.0</xerces.version>
<javax.version>1</javax.version>
<whvcse.version>1.6.2</whvcse.version>
<bitwalker.version>1.21</bitwalker.version>
<validator.version>6.1.7.Final</validator.version>
<gson.version>2.8.9</gson.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${validator.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- spring cache -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
<exclusions>
<exclusion>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
</exclusion>
<exclusion>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>${swagger-models.version}</version>
<scope>compile</scope>
</dependency>
<!--Mysql依赖包-->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!-- druid数据源驱动 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!--lombok插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--工具包-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
</dependency>
<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 打包时跳过测试 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<!--阿里云仓库-->
<repository>
<id>aliyun</id>
<name>aliyun-maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://maven.aliyun.com/repository/spring</url>
</repository>
<repository>
<id>central</id>
<name>maven-central</name>
<url>http://central.maven.org/maven2/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>public</id>
<name>aliyun nexus</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>其中上半部分,包含了下面几个比较重要的配置:

第一部分定义了jar包的groupId和artifactId,后面可以通过这两个id,可以从maven仓库中找到对应的jar包。
第二部分定义了项目的名称,在右边这里可以看到:

第三部分定义了parent,即父依赖。这里引入了spring-boot-starter-parent,版本是:2.7.18。
pom.xml文件的中间,引入了一些常用的jar包,比如:SpringBoot、hivernate等。

pom.xml文件的下半部分,包含了远程maven仓库的配置。

为了快速访问,这里使用了阿里云的远程仓库,从它里面下载相关依赖jar包。
当然这个pom.xml文件中,并非包含了苏三商城项目所有的依赖,有些依赖后面项目中用到再引入也不迟。
今天的第一步是把项目骨架搭建起来。
4 规划module
通过上面已经创建了一个空的SpringBoot的maven项目。
这个项目目前只有一个module。
但这个商城项目包含的功能和代码很多,我们需要对代码分层,让职责更单一,后面更好维护。
因此,需要将项目拆分成多个module。
选择项目susan_mall右键,在窗口中选择:New -》 Module:

就可以创建module了,做法跟创建project类似,这里就不过多介绍了。
我们打算拆分成4个module:
- mall-common:包含公共代码。
- mall-business:包含业务代码,比如:Service层和Mapper层。
- mall-mgt:包含接口层。
- mall-job:包含job和mq消费者。

最关键的一步是在susan-mall的pom.xml文件中,配置各个module:

这样在右边的窗口中,就会出现这些依赖:

此外,创建了sh目录和sql目录。
其中sh目录主要用于存放shell脚本,比如:后面项目部署的脚本。
而sql目录主要用于存放sql脚本。
5 规划代码目录
上面已经搭建了项目的基本骨架。
接下来,需要制定一些规范,规划各module项目下的代码目录。
这样,在后面开发的过程中,把代码按照严格的规范存放,就不会乱掉,方便后期的维护。
5.1 mall-common
mall-common这个模块的定位是包含一些公共代码的,比如:一些工具类,或者一些共用拦截器。
因此,目前规划了两个目录:

- util:存放工具类。
- interceptor:存放共用拦截器。
5.2 mall-business
mall-common这个模块的定位是包含业务逻辑,包含的东西比较多:

- config:存放配置类。
- constant:存放常量类。
- entity:存放实体类。
- interceptor:存放部分拦截器。
- mapper:存放mapper接口。
- service:存放service类。
- util:存放工具类。
5.3 mall-mgt
mall-common这个模块的定位是接口层:

- auth:存放权限点常量类。
- config:存放配置类。
- controller:存放接口。
5.4 mall-job
mall-job这个模块的定位是job的客户端实现和mq消费者:

- consumer:存放mq消费者类。
- handler:存放job的客户端。
6 启动应用
上面的这些准备工作做好之后,下面测试一下看看能否正常启动SpringBoot项目。
目前有两个应用服务:api和job。
api对应的mall-mgt模块,而job对应的是mall-job模块。
要想启动SpringBoot项目,必须增加一个main方法,并且添加SpringBoot的注解。
在mall-mgt模块中增加ApiApplication类:
@SpringBootApplication
public class ApiApplication {
public static void main(String[] args) {
SpringApplication.run(ApiApplication.class, args);
}
}在该类上增加@SpringBootApplication,开启SpringBoot应用的功能。
然后在controler目录下创建一个TestController类:
/**
* @author 苏三,该项目是知识星球:java突击队 的内部项目
* @date 2024/1/3 下午3:59
*/
@RestController
@RequestMapping("")
public class TestController {
@GetMapping("/test")
public String test() {
return "success";
}
}在浏览器上访问地址 http://localhost:8011/test

可以看到success返回,说明接口调用成功了。
当然为了让项目正常启动,还需要在application.yml文件中增加datasource,否则启动项目会失败。
spring:
application:
name: mall-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: 8011目前只配置了应用的名称为:mall-api,端口号为:8011,以及datasource的相关信息。
至此,苏三商城完整的项目骨架已经基本搭建完成了。