搭建SpringBoot多模块微服务项目脚手架(一)

news2024/11/18 9:41:31

搭建SpringBoot多模块微服务项目脚手架(一)

文章目录

  • 搭建SpringBoot多模块微服务项目脚手架(一)
    • 1.概述
    • 2.微服务环境搭建介绍
        • 1.微服务环境描述
        • 2.搭建环境组件和版本清单
    • 3.搭建父模块环境
      • 3.1.创建springboot父工程
        • 1.创建springboot
        • 2.配置maven和java
        • 3.精简父模块
        • 4.pom文件配置
        • 5.父模块结构
    • 4.创建微服务子模块
      • 4.1.创建微服务管理层
        • 1.创建service子模块
        • 2.配置service子模块
      • 4.2.创建微服务实现层
        • 1.创建微服务模块
      • 4.3.项目完整结构
        • 1.项目完整架构
        • 2.每个模块pom配置文件

1.概述

这篇文章介绍下搭建SpringBoot多模块项目脚手架,他最大的优点就是配套了开发微服务业务所有的附属产品,可以直接开发业务节省了搭建环境时间。

因为脚手架内容很多,因此将它设计为一个系列介绍,共分为三篇文章。
第一篇文章
搭建SpringBoot多模块微服务框架

第二篇文章
封装《MybatisPlus》
封装《Swagger》
封装《自动生成代码工具》

第三篇文章
封装《接口统一返回信息模板》
封装《接口统一请求信息模板》
封装《统一异常信息模板》
封装《统一日志模板》

2.微服务环境搭建介绍

1.微服务环境描述

这个脚手架不只是创建一个springboot项目,这样是不是直接开发业务的,还需要集成插件像swagger、MybatisPlus,封装底层框架像接口请求、接口响应、日志、异常等模块。
脚手架的目标就是准备好一个可以直接写业务代码的环境,下载下来就可以开发业务不再为开发环境耗费时间。

2.搭建环境组件和版本清单

组件名称版本号
SpringBoot2.6.1
MybatisPlus3.0.5
swagger3.0.0

3.搭建父模块环境

3.1.创建springboot父工程

1.创建springboot

1.File—>New—>project
2.创建一个spring工程:

  • 点击 Spring Initializr 表示创建一个spring工程
  • Project SDK 选择我们安装的JAVA版本
  • Choose Initializr Service URL 选择默认 Default
    3.点击Next

在这里插入图片描述

1.填写spring项目信息

  • Group:组织信息,倒序方式填写公司域名。例如:com.bruce
  • Artifact: 模块名称 例如:parent_spring
  • Type: 选择包管理插件,有maven和gradle。例如 maven
  • Java Version: 选择自己开发语言的版本
  • Version:打包版本,默认
  • Name:打包名称,默认
  • Package:打包路径,默认

在这里插入图片描述

1.选择springBoot版本和组件

  • Spring Boot: 选择springBoot版本
  • Developer Tools: 选择开发组件,这里选一个 SpringWeb组件

在这里插入图片描述

1.确认项目名称和路径
project name: 项目名称,默认即可
project location: 项目创建位置,默认即可

在这里插入图片描述

2.配置maven和java

mac系统: 点击 IntelliJ IDEA 下拉框点击 Preferences
windows系统: 点击 File 下拉框点击Setting

点击maven,选择本地电脑配置的maven版本

  • Maven home directory: maven安装路径,例如:/usr/local/apache-maven-3.5.3
  • User setting file: maven配置文件地址,例如:/usr/local/apache-maven-3.5.3/conf/settings.xml
  • Local repository: 本地maven仓库地址,例如:/Users/edy/Documents/javawork/mavenRepository

在这里插入图片描述

点击maven下拉框点击 Importing 勾选 Import Maven projects automatically , 以后添加依赖包就会自动导入,不需要手动导入。
在这里插入图片描述

点击File 下拉框点击 Project Structure 选择java开发语言版本

在这里插入图片描述

3.精简父模块

1.删除项目中不需要的内容包括

  • .mvn
  • HELP.md
  • mvnw
  • mvnw.cmd

2.删除src文件夹

4.pom文件配置

在项目中点击pom.xml 配置文件修改如下内容。
1.修改spring boot版本,改为我们使用的2.6.1版本
2.设置父模块为pom类型
3.父模块作为包管理器,它不使用依赖,因此在dependencies外面添加包管理标签 dependencyManagement
4.父模块用来管理子模块,它不会写代码因此需要将spring-boot-starter-webspring-boot-starter-test 依赖删除

修改完成后的pom.xml文件内容

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <!-- 1.修改springboot版本 -->
        <version>2.6.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.bruce</groupId>
    <artifactId>parent_spring</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>parent_spring</name>
    <description>Demo project for Spring Boot</description>
    <!-- 2.设置父模块为pom类型-->
    <packaging>pom</packaging>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <!-- 3.添加包管理标签 <dependencyManagement> -->
    <dependencyManagement>
    <dependencies>
    <!-- 4.删除 spring-boot-starter-web` 和 `spring-boot-starter-test` 依赖 -->
    </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

5.父模块结构

下面是配置完成的父模块工程结构

在这里插入图片描述

4.创建微服务子模块

创建子模块用来开发业务服务,我们是微服务因此每个子模块就是一个单独的服务。为了避免每个模块都重复引用相同的依赖,增加重复工作量,我们做了一个分层设计,设计理念如下。

微服务管理层:创建一个service模块用来管理所有的实现业务逻辑的微服务,在该模块中管理所有微服务需要的依赖包。
微服务实现层:在service模块下面创建多个子模块,每个模块都实现一个独立的业务逻辑功能,对外提供接口服务。

4.1.创建微服务管理层

1.创建service子模块

1.在父模块 parent_spring 右键点击 New 点击 Module 新建模块
2.选择创建Maven 类型模块

在这里插入图片描述

1.输入模块信息

  • Parent: 选择它要创建在哪个父模块下。 例如 parent_spring
  • Name: 新建模块的名称。 例如 service
  • Location: 新建模块创建的路径,默认即可

在这里插入图片描述

2.配置service子模块

1.service作为微服务管理层,它不需要写代码,因此删除src文件夹
2.修改pom.xml文件内容

  • 设置service模块为pom类型,因为它不写代码只管理依赖包。
  • 添加dependencies 依赖标签,并添加springbootweb 依赖
  • 添加build 设置打包规则

修改pom.xml文件完成后的内容

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>parent_spring</artifactId>
        <groupId>com.bruce</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>service</artifactId>
    <!-- 1.设置pom类型 -->
    <packaging>pom</packaging>

    <!-- 2.添加dependencies标签 -->
    <dependencies>
    	<!-- spring-boot-starter-web -->
    	<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <!-- 3.设置打包规则 -->
    <build>
        <resources>
            <resource>
                <!--设置的目录-->
                <directory>src/main/java</directory>
                <!--src/main/java目录下的所有后缀是xml文件打包,两个星表示多层目录,一个星表示一层目录下的xml文件-->
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

</project>

4.2.创建微服务实现层

1.创建微服务模块

1.在 service 模块右键点击 New 点击 Module 新建模块
2.选择创建Maven 类型模块
3.输入模块信息

  • Parent: 选择它要创建在哪个父模块下,注意这里一定要选择service模块。
  • Name: 新建模块的名称。 例如这个模块实现用户模块业务,因此定义名称为 servce_user
  • Location: 新建模块创建的路径,默认即可

在这里插入图片描述

4.3.项目完整结构

1.项目完整架构

到这里多模块的spring项目工程结构就搭建完成了,下面看下这个工程的完整结构。

在这里插入图片描述

2.每个模块pom配置文件

当我们创建了子模块后,maven 会自动在父模块的pom.xml 文件中modules 标签中添加子模块名称,用来建立父子模块管理关系。

1.parent_spring 模块 pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <!-- 1.修改springboot版本 -->
        <version>2.6.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.bruce</groupId>
    <artifactId>parent_spring</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>parent_spring</name>
    <description>Demo project for Spring Boot</description>
    <!-- 2.设置父模块为pom类型-->
    <packaging>pom</packaging>
    
	<!-- 自动添加了子模块service -->
    <modules>
        <module>service</module>
    </modules>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <!-- 3.添加包管理标签 <dependencyManagement> -->
    <dependencyManagement>
    <dependencies>

    </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.service 模块 pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>parent_spring</artifactId>
        <groupId>com.bruce</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>service</artifactId>
    <!-- 1.设置pom类型 -->
    <packaging>pom</packaging>
    <!-- 自动添加了子模块service_user -->
    <modules>
        <module>service_user</module>
    </modules>

    <!-- 2.添加dependencies标签 -->
    <dependencies>
    	<!-- spring-boot-starter-web -->
    	<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <!-- 3.设置打包规则 -->
    <build>
        <resources>
            <resource>
                <!--设置的目录-->
                <directory>src/main/java</directory>
                <!--src/main/java目录下的所有后缀是xml文件打包,两个星表示多层目录,一个星表示一层目录下的xml文件-->
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

</project>

3.service_user 模块 pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>service</artifactId>
        <groupId>com.bruce</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>service_user</artifactId>


</project>

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

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

相关文章

记录--服务端推送到Web前端有哪几种方式?

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 这个问题&#xff1f; 这个问题一般会出现在面试题里面&#xff0c;然后回答一些诸如轮询、WebSocket之类的答案。当然&#xff0c;实际开发中&#xff0c;也会遇到类似别人给你赞了&#xff0c;要通知…

华为OD机试题,用 Java 解【一种字符串压缩表示的解压】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…

20230309英语学习

What Is Sleep Talking? We Look at the Science 为什么人睡觉会说梦话&#xff1f;来看看科学咋说 Nearly everyone has a story about people talking in their sleep.Though it tends to be more common in children, it can happen at any age:A 2010 study in the jour…

如何恢复已清空的 Windows 回收站?

Windows 95 中引入的回收站文件夹&#xff08;也称为垃圾桶&#xff09;是有史以来最有用的功能之一&#xff0c;可以保护您免受自己的错误和粗心大意的影响。 通常&#xff0c;从文件夹中恢复丢失的文件就像单击桌面上的回收站图标并执行简单的拖放操作一样简单。 但是&…

Java实例实验项目大全源码企业通讯打印系统计划酒店图书学生管理进销存商城门户网站五子棋

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;java实例 获取完整源码源文件视频讲解文档资料等 文章目录1、企业通讯2、快递打印系统3、开发计划管理系统4、酒店管理系统5、图书馆管理系统6、学生成绩管理系统7、进销存管理系统8、神奇Book——图书商城9、企业门户网站…

数据库管理-第六十期 监听(20230309)

数据库管理 2023-03-09第六十期期 监听1 无法访问2 监听配置3 问题复现与解决4 静态监听5 记不住配置咋整总结第六十期期 监听 不知不觉又来到了一个整10期数&#xff0c;我承认上一期有很大的划水的。。。嫌疑吧&#xff0c;本期内容是从帮群友解决ADG前置配置时候的一个问题…

C51---定时器中断相关寄存器

1.中断系统&#xff0c;是为使CPU具有对外界紧急事件的实时处理能力而设置的。 当中央处理器CPU正在处理某件事情的时候&#xff0c;要求CPU暂停当前任务或工作&#xff0c;转而去处理这这个紧急事件。处理完以后&#xff0c;再回到原来的被中断的地方&#xff0c;继续原来的工…

华为OD机试题,用 Java 解【寻找相同子串】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…

RoCEv2网络部署实践

延续上篇RoCE网络的介绍&#xff0c;我们知道承载ROCEv2流量必须有一张无损网络。 本章主要介绍在以太网环境部署无损网络的关键点。 首先是QoS&#xff0c;包含流分类和队列调度两部分。 流分类&#xff1a;在网络接入设备&#xff08;TOR&#xff09;配置if-match类的语句&am…

一本通 2.8.1 广度优先搜索算法

1329&#xff1a;【例8.2】细胞 【题目描述】 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。如:阵列 有4个细胞。 【题目分析】 遍历所有节点&#xff0c;当无标识且不为零&#xff0c;…

「Vue面试题」动态给vue的data添加一个新的属性时会发生什么?怎样去解决的?

一、直接添加属性的问题 我们从一个例子开始 定义一个p标签&#xff0c;通过v-for指令进行遍历 然后给botton标签绑定点击事件&#xff0c;我们预期点击按钮时&#xff0c;数据新增一个属性&#xff0c;界面也 新增一行 <p v-for"(value,key) in item" :key&q…

Esp8266学习4. 基于Arduino的PWM与红外信号处理

Esp8266学习4. 基于Arduino的PWM与红外信号处理一、基本概念1. PWM2. ESP8266 的 PWM功能3. node-mcu 引脚图4. 模拟写入&#xff08;1&#xff09;analogWrite&#xff08;2&#xff09;修改频率 analogWriteFreq&#xff08;3&#xff09;调节分辨率二、使用 analogWrite实现…

思腾合力深思系列 | 四款高性能 AI 服务器

深思系列 AI 服务器涵盖多种 CPU 平台&#xff0c;支持按客户需求预装 OS、驱动、DL 框架、常用 DL 库&#xff0c;节省您大量的前期调试时间&#xff0c;开机即用。 一个简单的任务&#xff0c;若想要在 AI 的脑中形成清晰的思路&#xff0c;需要大量的实验和练习。从 AI 训练…

05-CSS

今日目标能够说出 为什么要用定位能够说出 定位的 4 种分类能够说出 4 种定位各自的特点能够说出 为什么常用子绝父相布局能够写出 淘宝轮播图布局能够说出 显示隐藏的 3 种方式以及区别1. 定位(position) 介绍1.1 为什么使用定位我们先来看一个效果&#xff0c;同时思考一下用…

ctfshow_crypto_妈呀完了writeup

目录一、题目原题二、解题步骤1.去掉01串中的空格2.把01二进制串转换成十进制数3.将十进制整数转换成bytes三、后记一、题目原题 题目给了一串01和一个png图片&#xff0c;打开看了提示说“图文无关”&#xff1a; 图片附件如下&#xff1a; 二、解题步骤 1.去掉01串中的空…

3·8 妇女节特别策划 | 对话开源社里的“半边天”:多彩的她们,有别样的力量~...

三八妇女节Womens Day< 2023/03/08 >01职场女性 陈阳开源社理事长、微软云计算机与人工智能事业部首席产品经理一句话介绍自己&#xff1a;开源社区中的二进制女性向上滑动阅览采访Q1&#xff1a;能介绍一下自己目前正在做的职业或者项目嘛&#xff1f;白天在微软云计算和…

Oracle调优日记

Oracle调优日记前言前置知识联表查询Inner Joinleft joinright join环境背景描述问题展示最初代码问题解决过程优化一优化二优化三接口测试检查数据库连接总结前言 很难想想会在600条数据和4万条数据的两张表联表查询的的情况下&#xff0c;查询花了10多s。这里记录一下排查过…

PMP考试是什么?介绍+资料分享

我来介绍一下PMP&#xff1a; PMP考试是由PMI组织和出题&#xff0c;严格评估项目管理人员知识技能是否具有高品质的资格认证考试。 1999年&#xff0c;PMP考试在所有认证考试中第一个获得ISO9001国际质量认证,从而成为全球权威的认证考试之一。下载PMP备考资料可看封面或在文…

二叉树经典14题——初学二叉树必会的简单题

此篇皆为leetcode、牛客中的简单题型和二叉树基础操作&#xff0c;无需做过多讲解&#xff0c;仅付最优解。有需要的小伙伴直接私信我~ 目录 1.二叉树的节点个数 2.二叉树叶子节点个数 3.二叉树第K层节点个数 4.查找值为X的节点 5.leetcode——二叉树的最大深度 6.leetc…

Spark(5):RDD概述

目录 0. 相关文章链接 1. 什么是RDD 2. RDD核心属性 3. 执行原理 0. 相关文章链接 Spark文章汇总 1. 什么是RDD RDD&#xff08;Resilient Distributed Dataset&#xff09;叫做弹性分布式数据集&#xff0c;是 Spark 中最基本的数据处理模型。代码中是一个抽象类&#x…