前后端分离项目之如何搭建

逻辑与分析图

* 拆分项目能提高开发效率,安全,拓展性,维护性
在这里插入图片描述

* 定义一个父项目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");
            }
        };
    }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值