【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 容器中。

相关推荐
白鲸开源6 小时前
Apache SeaTunnel Zeta Engine 的 Basic Auth 是怎么工作的?
java·vue.js·github
白鲸开源6 小时前
一文读懂DolphinScheduler插件机制:如何轻松扩展任务类型与数据源
java·架构·github
用户2986985301411 小时前
Java 实现 Word 文档文本查找与高亮标注
java·后端
宇宙之一粟12 小时前
乐企版式文件生成平台
java·后端·python
plainGeekDev12 小时前
MVC 写法 → MVVM
android·java·kotlin
SL_staff13 小时前
3周搭完MES系统:JVS低代码+JVS-IoT物联网的实战记录
java·前端·低代码
MacroZheng13 小时前
斩获20w star!Claude Code最强插件,AI编程必备!
java·人工智能·后端
唐青枫14 小时前
Java Spring WebFlux 实战指南:用 Mono、Flux 和 WebClient 写响应式接口
java·spring
小bo波1 天前
使用Thread子类创建线程 VS 使用Runnable接口创建线程的区别
java·多线程·thread·并发编程·runnable
SamDeepThinking1 天前
高并发场景下,CompletableFuture与ForkJoinPool该如何取舍?
java·后端·面试