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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 微服务中基于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>

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
12天前
|
SQL Java 数据库连接
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
97 29
|
1天前
|
XML Java 开发者
通过springboot框架创建对象(一)
在Spring Boot中,对象创建依赖于Spring框架的核心特性——控制反转(IoC)和依赖注入(DI)。IoC将对象的创建和管理交由Spring应用上下文负责,开发者只需定义依赖关系。DI通过构造函数、setter方法或字段注入实现依赖对象的传递。Spring Boot的自动配置机制基于类路径和配置文件,自动为应用程序配置Spring容器,简化开发过程。Bean的生命周期包括定义扫描、实例化、依赖注入、初始化和销毁回调,均由Spring容器管理。这些特性提高了开发效率并简化了代码维护。
|
1月前
|
数据采集 人工智能 分布式计算
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
阿里云推出的MaxFrame是链接大数据与AI的分布式Python计算框架,提供类似Pandas的操作接口和分布式处理能力。本文从部署、功能验证到实际场景全面评测MaxFrame,涵盖分布式Pandas操作、大语言模型数据预处理及企业级应用。结果显示,MaxFrame在处理大规模数据时性能显著提升,代码兼容性强,适合从数据清洗到训练数据生成的全链路场景...
88 5
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
|
28天前
|
人工智能 分布式计算 大数据
MaxFrame 产品评测:大数据与AI融合的Python分布式计算框架
MaxFrame是阿里云MaxCompute推出的自研Python分布式计算框架,支持大规模数据处理与AI应用。它提供类似Pandas的API,简化开发流程,并兼容多种机器学习库,加速模型训练前的数据准备。MaxFrame融合大数据和AI,提升效率、促进协作、增强创新能力。尽管初次配置稍显复杂,但其强大的功能集、性能优化及开放性使其成为现代企业与研究机构的理想选择。未来有望进一步简化使用门槛并加强社区建设。
66 7
|
27天前
|
开发框架 运维 监控
Spring Boot中的日志框架选择
在Spring Boot开发中,日志管理至关重要。常见的日志框架有Logback、Log4j2、Java Util Logging和Slf4j。选择合适的日志框架需考虑性能、灵活性、社区支持及集成配置。本文以Logback为例,演示了如何记录不同级别的日志消息,并强调合理配置日志框架对提升系统可靠性和开发效率的重要性。
|
2月前
|
Java 开发者 Spring
理解和解决Spring框架中的事务自调用问题
事务自调用问题是由于 Spring AOP 代理机制引起的,当方法在同一个类内部自调用时,事务注解将失效。通过使用代理对象调用、将事务逻辑分离到不同类中或使用 AspectJ 模式,可以有效解决这一问题。理解和解决这一问题,对于保证 Spring 应用中的事务管理正确性至关重要。掌握这些技巧,可以提高开发效率和代码的健壮性。
115 13
|
3月前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
210 6
|
3月前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
80 1
|
2月前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
278 69
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
5月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2