【SpringBoot项目拆分】

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

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

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

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

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

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

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

2. 新增SpringBoot项目

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

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

 <dependency><groupId>xxx</groupId><artifactId>common</artifactId><version>0.0.1-SNAPSHOT</version></dependency>

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

spring:profiles:active: common,xxx

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

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

@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,结果是相同的

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/888774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3GPP R18 LTM(L1/L2 Triggered Mobility)是什么鬼?(三) RACH-less LTM cell switch

这篇看下RACH-less LTM cell switch。 相比于RACH-based LTM,RACH-less LTM在进行LTM cell switch之前就要先知道target cell的TA信息,进而才能进行RACH-less过程,这里一般可以通过UE自行测量或者通过RA过程获取,而这里的RA一般是通过PDCCH order过程触发。根据38.300中的描…

Ansible 运维工具

安装 apt install ansible /etc/ansible/hosts , 指定密码或密钥访问分组机器 [k8s_masters] master0.c0.k8s.sb[k8s_nodes] node0.c0.k8s.sb node1.c0.k8s.sb[k8s:children] k8s_masters k8s_nodes[k8s_masters:vars] ansible_ssh_usersbadmin ansible_ssh_pass"***&q…

C++的Find算法用法,

在 C 中&#xff0c;可以使用 std::map 统计值出现次数为 2 的键。具体步骤如下&#xff1a; 遍历 std::map&#xff0c;找出所有值为 2 的键。使用条件语句检查每个值&#xff0c;符合条件时记录对应键。 #include <iostream> #include <map> #include <vect…

《鸟哥的Linux私房菜基础篇》---4 Linux档案的压缩与打包

目录 一、常见的压缩包的扩展名 二、常见的压缩和解压指令 1、tar 2、tar gzip&#xff08;.tar.gz&#xff09; (或 .tgz) 3、tar bzip2&#xff08;.tar.bz2&#xff09; 4、zip 5、gzip 6、bzip2 7、xz 8、rar 9、7z 三、安装解压工具 一、常见的压缩包的扩展…

基于springboot的音乐网站的设计与实现

文末获取源码和万字论文&#xff0c;制作不易&#xff0c;感谢点赞支持。 音乐网站 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了音乐网站的开发全过程。通过分析音乐网站管理的不足&#xff0c;创建了一个计…

【软考速通笔记】系统架构设计师⑲——专业英语

文章目录 一、前言二、常用名词三、架构风格四、非功能需求五、应用架构六、软件架构重用 一、前言 笔记目录大纲请查阅&#xff1a;【软考速通笔记】系统架构设计师——导读 二、常用名词 名词翻译architecture架构system系统design设计requirements需求components组件constr…

三菱JET伺服CC-Link IE现场网络Basic链接软元件(RYn/RXn)(RWwn/RWrn)

链接软元件(RYn/RXn) 要点 在循环通信中对主站发送给伺服放大器的请求(RYn及RWwn)设定了范围外的值时&#xff0c;将无法反映设定内容。 循环通信的请求报文与响应报文的收发数据被换读为伺服放大器的对象数据(RYn、RXn)。 响应报文的设定值可进行变更。变更初始设定值时&…

WPF中的VisualState(视觉状态)

以前在设置控件样式或自定义控件时&#xff0c;都是使用触发器来进行样式更改。触发器可以在属性值发生更改时启动操作。 像这样&#xff1a; <Style TargetType"ListBoxItem"><Setter Property"Opacity" Value"0.5" /><Setter …

ARINC 标准全解析:航空电子领域多系列标准的核心内容、应用与重要意义

ARINC标准概述 ARINC标准是航空电子领域一系列重要的标准规范&#xff0c;由航空电子工程委员会&#xff08;AEEC&#xff09;编制&#xff0c;众多航空公司等参与支持。这些标准涵盖了从飞机设备安装、数据传输到航空电子设备功能等众多方面&#xff0c;确保航空电子系统的兼…

用golang简单做一个内网穿透小工具!

一个个人需求&#xff0c;需要简单的穿透一下 家里的电脑&#xff0c;也不需要多稳定&#xff0c;也没有并发。然后 通过http可以访问到内网的 一个网站&#xff0c; 因为服务端 是linux 系统 &#xff0c;内网是 windows10服务器 所以 就采用 用golang这个语言来实现&#xff…

Android Studio 历史版本下载

Android Studio 历史版本下载 官方链接&#xff1a;https://developer.android.google.cn/studio/archive 通过gradle插件版本反查Android Studio历史版本 Android Studio Ladybug | 2024.2.1 October 1, 2024 【https://redirector.gvt1.com/edgedl/android/studio/ide-zip…

微服务监控prometheus+Grafana

目录 Prometheus 概述 核心组件 特点 使用场景 Grafana 概述 功能特点 使用场景 PrometheusGrafana组合 部署和配置 一、准备工作 二、部署Prometheus 三、部署Grafana 四、创建监控仪表盘 五、验证和调优 总结 微服务监控是确保微服务架构稳定运行的关键环节…

(vue)el-cascader多选级联选择器,值取最后一级的数据

(vue)el-cascader多选级联选择器&#xff0c;取值取最后一级的数据 获取到&#xff1a;[“养殖区”,“鸡棚”,“E5001”] 期望&#xff1a;[“E5001”] 问题: 解决方法 增加change事件方法&#xff0c;处理选中的value值 1.单选 <el-cascaderv-model"tags2":o…

Java设计模式之状态模式架构高扩展的订单状态管理

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s…

独立ip服务器有什么优点?

网站的性能和安全性直接影响到用户体验和业务发&#xff0c;独立IP服务器作为一种主流的托管方式&#xff0c;因其独特的优势而受到许多企业和个人站长的青睐。与共享IP相比&#xff0c;独立IP服务器到底有哪些优点呢&#xff1f; 使用独立IP的用户不必担心与其他网站共享同一…

深入理解MySQL中的ONLY_FULL_GROUP_BY

在MySQL数据库管理中&#xff0c;ONLY_FULL_GROUP_BY是一个重要的SQL模式&#xff0c;它直接影响着GROUP BY语句的执行方式和结果。本文将从基础概念出发&#xff0c;逐步解析ONLY_FULL_GROUP_BY的工作原理、应用场景及应对策略。 什么是ONLY_FULL_GROUP_BY&#xff1f; ONLY…

图论理论基础和存储方式的实现

图论1 图论 (Graph theory) 是数学的一个分支&#xff0c;图是图论的主要研究对象。图 (Graph) 是由若干给定的顶点及连接两顶点的边所构成的图形&#xff0c;这种图形通常用来描述某些事物之间的某种特定关系。顶点用于代表事物&#xff0c;连接两顶点的边则用于表示两个事物…

每日一练 | Diff-Serv在QoS配置中的应用

01 真题题目 通常在配置 QoS 中的 Diff-Serv 时,边界路由器会通过报文的源地址和目的地址等对报文 进行分类,对不开的报文设置不同的IP优先级,而其他路由器只需要根据IP优先来对报文进行 识别即可 A.正确 B.错误 02 真题答案 A 03 答案解析 在基于 Diff-Serv&#xff08;Diff…

macOS运行amd64的镜像

在macOS上运行amd64&#xff08;x86_64&#xff09;架构的镜像&#xff0c;通常通过虚拟化或仿真工具来实现。例如&#xff0c;如果你使用的是基于Apple Silicon&#xff08;M1或M2等&#xff09;芯片的Mac&#xff0c;那么你的处理器是ARM架构的&#xff0c;而amd64是x86架构&…