微服务中基于Spring Boot的maven分布式项目框架的搭建(一)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 微服务中基于Spring Boot的maven分布式项目框架的搭建

0df6aadf9d2e837ca1c4c0075d07a6af_640_wxfrom=5&wx_lazy=1&wx_co=1.jpg


最近我搭建了一个基于Spring Boot的maven分布式项目框架,主要是用于后面的Spring Cloud微服务项目。我把它抽象出来,分享给大家。


0. 项目介绍


在微服务架构中,传统的 maven 项目已经无法满足,开始走向分布式架构,本项目主要搭建一个空的 maven 分布式架构,可以运用到实际项目中进行扩展。


这里搭建的是基于 maven 的分布式工程,因为在一个项目中,多个微服务是属于同一个工程,只不过是提供不同的服务而已,再加上 IDEA 是默认一个窗口打开一个项目工程(这点和 eclipse 不同),如果项目大,不用 maven 分布式工程(也可以称聚合工程)的话,那估计会打开十几个窗口……会崩溃……而且在架构上,也应该使用 maven 分布式工程来搭建微服务架构。


这里手把手教大家如何在 IDEA 中搭建基于 maven 分布式的 Spring Cloud 微服务工程架构。我会写的非常详细,目的就是让每一位读者能够读懂创建的过程。并且在文章末尾提供源码下载地址。


1. maven分布式工程架构概览


首先来看一下 maven 分布式工程的基本架构,如下:


microservice

---- microservice-common

---- microservice-order-provider

---- microservice-order-consumer

在 IDEA 中,并没有这个结构化的展示,这几个模块都是平级的方式展现在我们眼前,但是彼此有依赖关系,体现在 pom.xml 文件中,我在下文会详细说明。


microservice为父工程模块,主要用来定义整个分布式工程的依赖版本;

microservice-common为公共模块,主要用来定义一些公共的组件,比如实体类等;

microservice-order-provider为订单服务提供者模块,提供订单信息,实际项目中可能还有其他服务提供模块;

microservice-order-consumer为服务消费模块,当然了,消费模块也可能有很多,这里只创建一个,实际项目中可以在此基础上进行扩展。


2. maven父工程microservice的搭建


打开IDEA,File->New->New Project,然后选择Empty Project,如下。


Next,然后给maven分布式项目起个名儿,如 maven_distributed。


接下来会弹出窗口让我们新建 modules,点击 + 号,新建一个父工程,也就是一个父 module。然后我们选择 maven 工程,选择 jdk 版本和模板,模板也可以不选择,我这里就没有选择,自己搭建即可。


Next,需要输入 GroupId 和 ArtifactId,这和普通的 maven 工程没什么两样,如:


GroupId:com.itcodai


ArtifactId:microservice


创建好之后,该父工程 microservice 是个空的 maven 工程,只有 src 目录和 pom.xml 文件,在父工程中我们主要做什么呢?父工程中主要用来定义一些依赖的版本,子工程在创建的时候继承该父工程,就可以使用对用的依赖,不需要指定版本号。同时,如果有版本相关的修改,只要在父工程中修改即可,这是 maven 分布式工程的好处之一,它就相当于 Java 中的抽象父类。


新创建的空 maven 工程没有指定其 <packaging> 类型,maven 父工程需要指定 packaging 类型为 pom,如下:


<?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">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.itcodai</groupId>
   <artifactId>microservice</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>pom</packaging>
</project>

然后我们来定义一些依赖和相应的版本,依赖的版本我们定义在 properties 标签内,如下。


<?xml version="1.0" encoding="UTF-8"?>
<project ...>
 <!-- 省略其他内容 -->
 <properties>
       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
       <maven.compiler.source>1.8</maven.compiler.source>
       <maven.compiler.target>1.8</maven.compiler.target>
       <spring-cloud.version>Edgware.SR1</spring-cloud.version>
       <spring-boot.version>2.0.3.RELEASE</spring-boot.version>
       <mysql.version>5.1.46</mysql.version>
       <mybatis.version>1.3.2</mybatis.version>
       <lombok.version>1.16.18</lombok.version>
   </properties>
</prject>

如上,我们定义了项目的编码为 UTF-8,编译版本为 jdk8,其他依赖版本为:


* Spring Cloud 的版本为 Edgware.SR1,Spring Cloud 的版本号定义的非常“奇怪”,不是我们平常看到的几点几版本,它是由地名儿来命名的

* Spring Boot 版本为当前最新版本 2.0.3.RELEASE。

* mysql 版本为 5.1.14。

* mybatis 版本为 1.3.2。

* lombok版本为 1.16.8。

其他依赖在项目使用到时,再添加即可,这里先定义这么多。在定义版本时,要注意的是不同的依赖版本之间会有影响,有些最新的版本不支持其他依赖的低版本一起使用,比如 mysql 的版本太低就不行,例如 5.0.4 版本就无法和最新的 mybatis 一起使用,这些在实际项目中都踩过坑,所以大家在学习的时候要多尝试,多总结,最新版本不是不好用,有时候是用不好。但是只要认真探索,多踩坑才能进步


定义了依赖版本之后,接下来我们就在父工程中定义依赖管理,放在 <dependencyManagement> 标签中,如下。


<?xml version="1.0" encoding="UTF-8"?>
<project ...>
 <!-- 省略其他内容 -->
 <dependencyManagement>
       <dependencies>
           <!-- 定义 spring cloud 版本 -->
           <dependency>
               <groupId>org.springframework.cloud</groupId>
               <artifactId>spring-cloud-dependencies</artifactId>
               <version>${spring-cloud.version}</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
           <!-- 定义 spring boot 版本 -->
           <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-dependencies</artifactId>
               <version>${spring-boot.version}</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
           <!-- 定义 mysql 版本 -->
           <dependency>
               <groupId>mysql</groupId>
               <artifactId>mysql-connector-java</artifactId>
               <version>${mysql.version}</version>
           </dependency>
           <!-- 定义 mybatis 版本 -->
           <dependency>
               <groupId>org.mybatis.spring.boot</groupId>
               <artifactId>mybatis-spring-boot-starter</artifactId>
               <version>${mybatis.version}</version>
           </dependency>
           <!-- 定义 lombok 版本 -->
           <dependency>
               <groupId>org.projectlombok</groupId>
               <artifactId>lombok</artifactId>
               <version>${lombok.version}</version>
           </dependency>
       </dependencies>
   </dependencyManagement>
</project>

使用 ${} 来定义上面 <properties> 标签中定义的版本即可。最后我们定义一下 maven 插件,如下。


<?xml version="1.0" encoding="UTF-8"?>
<project ...>
 <!-- 省略其他内容 -->
 <build>
       <plugins>
           <plugin>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-maven-plugin</artifactId>
           </plugin>
       </plugins>
   </build>
</project>

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
8月前
|
JSON 分布式计算 大数据
springboot项目集成大数据第三方dolphinscheduler调度器
springboot项目集成大数据第三方dolphinscheduler调度器
505 3
|
8月前
|
Java 区块链 Maven
关于引入maven项目后出现‘parent.relativePath’ of POM错误时的解决方法
关于引入maven项目后出现‘parent.relativePath’ of POM错误时的解决方法
648 3
|
8月前
|
Java 关系型数据库 数据库连接
Spring Boot项目集成MyBatis Plus操作PostgreSQL全解析
集成 Spring Boot、PostgreSQL 和 MyBatis Plus 的步骤与 MyBatis 类似,只不过在 MyBatis Plus 中提供了更多的便利功能,如自动生成 SQL、分页查询、Wrapper 查询等。
803 3
|
7月前
|
Java jenkins 应用服务中间件
结合Jenkins与Tomcat,实施Maven项目的自动构建和部署流程。
任何项目构建和部署的自动化流程,总离不开对各个环节精细把控与密切配合。涉及到源代码管理、构建工具、持续集成服务器以及最终的运行时环境的协调。通过上述简洁实用的步骤,可以实现Maven项目从源代码到运行状态的无缝过渡,进而提升软件开发的效率与质量。
393 0
|
8月前
|
Java 测试技术 Spring
简单学Spring Boot | 博客项目的测试
本内容介绍了基于Spring Boot的博客项目测试实践,重点在于通过测试驱动开发(TDD)优化服务层代码,提升代码质量和功能可靠性。案例详细展示了如何为PostService类编写测试用例、运行测试并根据反馈优化功能代码,包括两次优化过程。通过TDD流程,确保每项功能经过严格验证,增强代码可维护性与系统稳定性。
327 0
|
8月前
|
存储 Java 数据库连接
简单学Spring Boot | 博客项目的三层架构重构
本案例通过采用三层架构(数据访问层、业务逻辑层、表现层)重构项目,解决了集中式开发导致的代码臃肿问题。各层职责清晰,结合依赖注入实现解耦,提升了系统的可维护性、可测试性和可扩展性,为后续接入真实数据库奠定基础。
642 0
|
Java Maven 开发者
maven项目中官方setting.xml文件
`settings.xml` 是 Maven 的配置文件,用于定义用户或全局级别的构建行为。它包含本地仓库路径、网络代理、服务器认证、仓库镜像及构建配置文件等设置,帮助开发者根据环境定制 Maven 行为,提升构建效率与灵活性。
1435 0
|
分布式计算 大数据 Java
springboot项目集成大数据第三方dolphinscheduler调度器 执行/停止任务
springboot项目集成大数据第三方dolphinscheduler调度器 执行/停止任务
202 0
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
779 6
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
399 1

推荐镜像

更多