文章目录
逻辑与分析图
* 拆分项目能提高开发效率,安全,拓展性,维护性
* 定义一个父项目parent主要用于定义pom中的依赖,此项目是继承springboot项目的,此项目只做依赖配置,其他都不做
* core项目主要是定义公用的mapper,service等包供其子项目所用
* 每个子项目只需继承父项目parent即可
* parent项目会定义一个一个core项目的依赖版本管理则其他项目可以添加依赖core项目(无需配置版本)从而获得core项目所有功能
开始搭建
- 这里分5个项目.一个父项目,4个子项目
- 子项目分为core项目,api项目,website项目,mgrsite项目
- core用于配置mapper,service,以及各种所需依赖
- 另外3个子项目则是通过继承父项目并配置依赖从而继承core项目,能继承core项目的所有
- api项目主要是就为了给前端提供接口,继承并使用了core项目中的mapper,service等功能操作
- website项目是前端页面项目,用vue技术创建(严格来说属于parent项目的模块,不叫子项目~)
- mgrsite项目是后端管理页面项目
- 正常的方式new一个maven项目作为parent父项目,继承Springboot父项目改造成springboot项目,并添加
<dependencyManagement>
管理core项目的版本即可 - pom.xml 中加入以下
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/>
</parent>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.edt.xxx</groupId>
<artifactId>xxx-core</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</dependencyManagement>
-
右键点击parent项目,然后点击module创建新模块
-
选择父项目parent作为parent的选择即可创建子项目成功
core项目
统一骨架约定
- 要继承core项目的其他springboot项目,搭建架构要和core的架构文件相同才行
------------------------演示一下--------------------------- - core项目的骨架是这样的,com/edt/trip/xxx…
- 继承core项目的api项目骨架也要一样,com/edt/trip/xxx…
处理继承的配置文件properties冲突问题
- 各种pom.xml的依赖配置和业务方法主要集中于core项目,core项目主要是用于被继承后而使用的(充当于公共产品)
- 但是core项目中的配置文件 core.properties文件,被其他项目继承过去会失效,因为spring优先匹配子项目中命名为application.properties的配置文件
- 所以core项目中要添加配置类来解决此问题
- @PropertySource可加载配置文件
@Configuration
@MapperScan(basePackages = "com.edt.trip.mapper")
@PropertySource("classpath:core.properties")
public class CoreConfig {
}
core.properties
#数据库
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.password=19980220
spring.datasource.username=root
spring.datasource.url=jdbc:mysql://localhost:3306/trip?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
# 文件上传限制
spring.servlet.multipart.max-file-size=500MB
spring.servlet.multipart.max-request-size=500MB
#日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#mongodb
#spring.data.mongodb.uri=mongodb://127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019/trip?replicaSet=rs
spring.data.mongodb.uri=mongodb://127.0.0.1:27017/trip
logging.level.org.springframework.data.mongodb.core= DEBUG
#redis
spring.redis.host=127.0.0.1
#elasticsearch
spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300
spring.data.elasticsearch.repositories.enable=true
api项目
- 主要是为前端项目提供接口的项目
- 添加core项目的依赖,并用core项目中的业务方法实现接口的提供
pom.xml配置
- 添加core项目的依赖,用于调用业务方法实现接口
- 添加 spring-boot-starter-web依赖即可使用启动类
<dependencies>
<dependency>
<groupId>com.edt.xxx</groupId>
<artifactId>xxx-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
application.properties
server.port=8080
解决跨域问题
- 因为api项目主要是为了给前端提供接口的,项目用的是前后端分离,所以是2个服务器运行,端口不同的话则会出现跨域问题
- 配置一个WebConfig配置类解决跨域问题
@Configuration
public class WebConfig implements WebMvcConfigurer{
//跨域访问
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
//重写父类提供的跨域请求处理的接口
public void addCorsMappings(CorsRegistry registry) {
//添加映射路径
registry.addMapping("/**")
//放行哪些原始域
.allowedOrigins("*")
//是否发送Cookie信息
.allowCredentials(true)
//放行哪些原始域(请求方式)
.allowedMethods("GET", "POST", "PUT", "DELETE","OPTIONS")
//放行哪些原始域(头部信息)
.allowedHeaders("*")
//暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)
.exposedHeaders("Header1", "Header2");
}
};
}
}