【SpringBoot项目拆分】

背景:两个项目都使用相同了的底层方法,每次变更都需要修改两个项目,所以就考虑是否可以抽出来一个单独的项目来维护这些底层方法。

在网上找了很多发现都是新建module的,这种方法适合一个项目内部优化结构,不适合两个项目共用,最后突然想到了之前曾经做过一个项目,多个项目都依赖于公共方法模块,然后找了之前的代码,发现核心实现方式是SpringBoot启动类的注解@MapperScan和@ComponentScan。

下面说下整体的实现流程,最后再介绍上面两个注解

1. 新建一个maven项目(common)

在这个项目中放所有的公共服务代码,其中注解正常添加即可。

在pom上添加所有用到的依赖。

新增Spring的配置文件(如果需要的话,不需要忽略,比如数据库配置信息等等),配置文件需要命名为application-common.yml

2. 新增SpringBoot项目

在这个项目中,存放上层调用。

在pom上除了添加正常依赖外,还需要添加common项目的依赖

XML 复制代码
 <dependency>
            <groupId>xxx</groupId>
            <artifactId>common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

在application.yml中配置激活的配置文件,如下

XML 复制代码
spring:
  profiles:
    active: common,xxx

在启动类上添加@MapperScan注解,添加需要扫描的mapper包

在启动类上添加@ComponentScan注解,添加需要注册bean包(注意:本项目和common项目中的包都需要添加)

java 复制代码
@MapperScan("com.test.common")
@ComponentScan(basePackages = {"com.test.common", "com.test.web"})
@SpringBootApplication()
public class WebApplication {

    public static void main(String[] args) {
        SpringApplication.run(WebApplication.class, args);
    }

}

在这块,ComponentScan的写法可以修改为如下scanBasePackages,结果是相同的

java 复制代码
@MapperScan("com.test.common")
@SpringBootApplication(scanBasePackages = {"com.test.common", "com.test.web"})
public class WebApplication {

    public static void main(String[] args) {
        SpringApplication.run(WebApplication.class, args);
    }

}

3. MapperScan

@MapperScan 是 MyBatis-Spring 项目中的一个注解,用于指示 Spring 扫描并注册 MyBatis 的 Mapper 接口,使得这些接口可以被自动实例化并注入到 Spring 容器中。

在使用 MyBatis 时,通常会定义 Mapper 接口来描述 SQL 操作,而实际的 SQL 语句和参数映射是通过 XML 文件完成的。@MapperScan 注解的作用是告诉 Spring 扫描指定的包路径,查找这些包下的 Mapper 接口,并将它们注册到 Spring 容器中。

4. ComponentScan

使用 @ComponentScan 注解可以告诉 Spring 在指定的包或类路径下进行组件扫描,然后自动将被扫描到的组件注册到 Spring 容器中。

相关推荐
写后端的胖头鱼3 小时前
Redis 的 RDB 和 AOF
java·数据库·redis
cxoptics3 小时前
LBO 激光损伤阈值 LIDT 典型数值?如何避免晶体打坏?
java
逐米时代3 小时前
远程运维诊断减少到场率
java·服务器·前端
禾小西3 小时前
Redis AOF 日志:宕机了,如何避免数据丢失?
java·redis·mybatis
xuxigifxfh3 小时前
HJ11 数字颠倒
java·开发语言·华为机考
wno7044 小时前
Spring Boot整合Quartz
java·spring boot·后端
步行cgn4 小时前
MySQL 报错:Access denied for user ‘root‘@‘localhost‘ 详解
java·数据库·spring
一个有温度的技术博主4 小时前
深拷贝和浅拷贝:一次“搬家”事故
java·后端
萧瑟余晖4 小时前
Spring Boot Actuator监控运维详解
spring boot
鱼宵5 小时前
Spring AI 生产化改造:记忆落 Redis、向量落 ES,重启再也不丢
人工智能·redis·spring·elasticsearch·springai