Maven和IntelliJ IDEA搭建多模块微服务的实现
作者:小Aan《啊中》
基于Spring Boot、Spring Cloud、Spring Cloud Alibaba的微服务开发,组件众多。因此,在创建项目伊始,就应当考虑版本的管理。以Spring Boot的版本升级发布为基础,Spring Cloud的版本升级发布,会匹配Spring Boot升级发布的版本。Spring Cloud Alibaba版本升级发布,会匹配Spring Boot和Spring Cloud的版本升级发布的版本
本例版本:
Spring Boot 2.6.3
Spring Cloud 2021.0.1
Spring Cloud Alibaba 2021.0.1.0
Apache Maven 3.6.3
IntelliJ IDEA 2021.2.3
JDK 1.8
Spring Framework 5.3.15
本例实现基于Maven和IntelliJ IDEA搭建多模块微服务项目(工程)。
第一层级工程,只管理第二层级工程。
第二层级工程,管理第三层级工程。
以此类推,使用pom.xml中的modules和module标签管理维护关系。
1.规划微服务
规划微服务如表格。
2.创建hub-example
hub-example,是顶级工程,是一个聚合工程,用来管理工程所有模块。在hub-example中的src目录不写代码,可以删除。在pom.xml中打包方式配置为pom。
2.1 创建Maven工程
运行IDEA,依次选择菜单File->New->Project进入New Project对话框,如下配置。
2.2 配置工程信息
hub-example工程配置信息。
2.3 创建完成
项目创建完成如图,项目初始列表,pom.xml初始化文件
3.配置hub-example的pom.xml
配置hub-example的pom.xml,包括以下几点内容,细节在pom.xml查看。
(1)配置打包方式。
(2)配置核心依赖。
(3)配置版本管理。
(4)配置打包插件。
(5)配置yml文件读取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.hub</groupId> <artifactId>hub-example</artifactId> <version>1.0-SNAPSHOT</version> <modules> <module>hub-dependencies</module> <module>hub-common</module> <module>hub-ware</module> </modules> <!--(1)配置打包方式(2)配置核心依赖(3)配置版本管理(4)配置打包插件(5)配置yml文件读取pom文件的标签值。--> <!--聚合工程,打包方式:pom--> <packaging>pom</packaging> <!-- 版本管理 --> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <spring.boot.version>2.6.3</spring.boot.version> <spring.cloud.version>2021.0.1</spring.cloud.version> <spring.cloud.alibaba.version>2021.0.1.0</spring.cloud.alibaba.version> <!-- 统一管理hub-example的版本,在子模块直接使用此版本即可--> <hub.example.version>1.0-SNAPSHOT</hub.example.version> <spring.boot.maven.plugin.version>2.6.3</spring.boot.maven.plugin.version> <mysql.version>5.1.47</mysql.version> <druid.version>1.1.23</druid.version> <pagehelper.version>1.4.1</pagehelper.version> <mybatis.version>2.2.0</mybatis.version> <mybatis-plus.version>3.3.1</mybatis-plus.version> <lombok.version>1.18.18</lombok.version> <fastjson.version>1.2.83</fastjson.version> <hutool.version>5.7.22</hutool.version> <commons.lang3.version>3.12.0</commons.lang3.version> <commons.io.version>2.11.0</commons.io.version> </properties> <!-- 核心依赖 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring.boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring.cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring.cloud.alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <!-- yml文件读取pom文件的标签值 --> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <plugins> <!-- 配置打包插件 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring.boot.maven.plugin.version}</version> <configuration> <fork>true</fork> <addResources>true</addResources> </configuration> </plugin> </plugins> </build> <profiles> <profile> <!-- yml配置文件环境切换: dev/test/prod --> <id>env</id> <properties> <profiles.active>dev</profiles.active> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> </profiles> </project>
4.hub-example添加模块
hub-example添加的模块也是聚合工程,主要包括:
(1)hub-dependencies,集中管理依赖。聚合工程,不写代码,可以删除src目录。其子模块作用,在pom.xml文件引入常用的依赖。项目中其它工程只要引用hub-dependencies的子模块就行。
(2)hub-common,管理封装的通用模块。聚合工程,不写代码,可以删除src目录。封装的通用代码放在这个模块的子模块中,给每个需要的工程引用。减少重复代码,提供代码可复用度。
(3)hub-ware,管理独立运行的微服。每个业务规划一个微服务。
以hub-dependencies添加子模块为例,归纳以下步骤。
4.1 新建Module
选中hub-example,右键,依次选择:New->Module,进入模块配置对话框。
4.2 配置Module版本和方式
选择Maven方式、选择JDK版本。
4.3 配置Module基础信息
配置hub-dependencies基础信息。
4.4 添加剩余模块
按照以上步骤,添加完成hub-common、hub-ware。
4.5 hub-example的pom.xml文件
hub-example的pom.xml文件中新增了<modules>标签即如下。即hub-example管理以下包含的模块。
<modules> <module>hub-dependencies</module> <module>hub-common</module> <module>hub-ware</module> </modules>
5.hub-dependencies添加模块
hub-dependencies添加hub-pf-a-dependencies和hub-pf-b-dependencies模块。
5.1 新建Module
选中hub-dependencies,右键,依次选择:New->Module,进入模块配置对话框。
5.2 配置Module版本和方式
选择Maven方式、选择JDK版本。
5.3 配置Module基础信息
配置hub-pf-a-dependencies基础信息。
5.4 添加剩余模块
按照以上步骤,添加完成hub-pf-b-dependencies。
5.5 hub-dependencies工程的pom.xml
添加模块后,hub-dependencies工程的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>hub-example</artifactId> <groupId>com.hub</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>hub-dependencies</artifactId> <packaging>pom</packaging> <modules> <module>hub-pf-a-dependencies</module> <module>hub-pf-b-dependencies</module> </modules> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> </project>
6.hub-common添加模块
根据5.hub-dependencies添加模块的步骤:
给hub-common添加example-common-entity和example-common-utils模块。
6.1 hub-common工程的pom.xml
添加模块后,hub-common工程的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>hub-example</artifactId> <groupId>com.hub</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>hub-common</artifactId> <packaging>pom</packaging> <modules> <module>example-common-entity</module> <module>example-common-utils</module> </modules> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> </project>
7.hub-ware添加模块
根据5.hub-dependencies添加模块的步骤:
给hub-ware添加example-biz-a和example-biz-b模块。
7.1 hub-ware工程的pom.xml
添加模块后,hub-ware工程的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>hub-example</artifactId> <groupId>com.hub</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>hub-ware</artifactId> <packaging>pom</packaging> <modules> <module>example-biz-a</module> <module>example-biz-b</module> </modules> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> </project>
8.hub-example工程列表
创建工程和添加子模块后,工程hub-example工程列表。每个工程上一级和下一级都是通过pom.xml来维护管理关系。
9.hub-dependencies的子模块添加依赖
为hub-dependencies模块的子模块hub-pf-a-dependencies和hub-pf-b-dependencies模块添加依赖。
9.1 hub-pf-a-dependencies依赖
hub-pf-a-dependencies依赖,主要是基础Jar包。
<?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>hub-dependencies</artifactId> <groupId>com.hub</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>hub-pf-a-dependencies</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <!--基础工具--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${commons.lang3.version}</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>${commons.io.version}</version> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>${hutool.version}</version> </dependency> </dependencies> </project>
9.2 hub-pf-b-dependencies依赖
hub-pf-a-dependencies依赖,主要是操作数据库的Jar包。
<?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>hub-dependencies</artifactId> <groupId>com.hub</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>hub-pf-b-dependencies</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <!--数据库操作--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!--连接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>${druid.version}</version> </dependency> <!--PageHelper分页插件--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>${pagehelper.version}</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatis-plus.version}</version> </dependency> </dependencies> </project>
10.hub-common的子模块添加依赖
为hub-common模块的子模块example-common-entity和example-common-utils模块添加依赖。
<?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>hub-common</artifactId> <groupId>com.hub</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>example-common-utils</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>com.hub</groupId> <artifactId>hub-pf-a-dependencies</artifactId> <version>${hub.example.version}</version> </dependency> </dependencies> </project>
11.hub-ware添加依赖
为hub-ware模块的子模块example-biz-a模块添加依赖。
11.1 example-biz-a依赖
example-biz-a需求:基础依赖、数据库操作依赖、springboot依赖。
注意:spring-boot、spring-cloud、spring-cloud-alibaba,在hub-example中已经引入顶级依赖。在子工程中使用其模块,可以不需要加版本号。
<?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>hub-ware</artifactId> <groupId>com.hub</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>example-biz-a</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <!--springboot依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--基础依赖--> <dependency> <groupId>com.hub</groupId> <artifactId>hub-pf-a-dependencies</artifactId> <version>${hub.example.version}</version> </dependency> <!--数据库操作依赖--> <dependency> <groupId>com.hub</groupId> <artifactId>hub-pf-b-dependencies</artifactId> <version>${hub.example.version}</version> </dependency> </dependencies> <!--example-biz-a打包成可执行Jar包--> <packaging>jar</packaging> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring.boot.maven.plugin.version}</version> <configuration> <fork>true</fork> <addResources>true</addResources> </configuration> <executions> <execution> <!-- 把依赖包打包到可执行的jar包中--> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
11.2 example-biz-a打包成可执行Jar包
example-biz-a打包成可执行Jar包,则在pom.xml中添加配置。
<packaging>jar</packaging> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring.boot.maven.plugin.version}</version> <configuration> <fork>true</fork> <addResources>true</addResources> </configuration> <executions> <execution> <!-- 把依赖包打包到可执行的jar包中--> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
12.1在example-biz-a模块中创建一个包com.htb,并在该包下创建一个启动类BizAApplication
启动类代码如下:
package com.hub; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class BizAApplication { public static void main(String[] args) { SpringApplication.run(BizAApplication.class, args); System.out.println("BizAApplication模块启动成功!!"); } }
12.2在resources包下创建application.yml配置数据库连接池和分页插件参数,代码如下:
# tomcat端口号 server: port: 8080 # spring配置 spring: application: # 程序名 name: example-biz-a # 数据源配置 datasource: druid: username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false # 配置mybatis mybatis: configuration: # 将下划线映射成驼峰命名 map-underscore-to-camel-case: true # 指定日志的实现类,在控制台显示SQL语句 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 给实体类指定别名,在resultType中不用指定类全名,使用类简单名字即可 (多个包使用逗号分隔) #type-aliases-package: com.itheima.reggie.entity,com.itheima.reggie.dto # 指定映射文件目录 mybatis中实体映射文件xml所在的目录 mapper-locations: classpath:mapper/*.xml # 分页组件 pagehelper: # 合理化分页,如果为true,pageNum < 1 会查询第1页 pageNum > 最后一页 会查询最后一页的数据 # 如果设置为false,pageNum < 1 或 pageNum > 最后一页 会返回空的数据 reasonable: true # 指定使用哪种数据库 helper-dialect: mysql
12.3开启动类BizAApplication,spring和pagehelper分页组件启动成功!!
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.6.3) 2024-02-25 11:49:31.216 INFO 12620 --- [ main] com.hub.BizAApplication : Starting BizAApplication using Java 1.8.0_221 on LAPTOP-MN4GQ4TM with PID 12620 (D:\java_code\2024test\hub-example\hub-ware\example-biz-a\target\classes started by HONOR in D:\java_code\2024test\hub-example) 2024-02-25 11:49:31.216 INFO 12620 --- [ main] com.hub.BizAApplication : No active profile set, falling back to default profiles: default 2024-02-25 11:49:31.682 WARN 12620 --- [ main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.hub]' package. Please check your configuration. 2024-02-25 11:49:31.944 INFO 12620 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2024-02-25 11:49:31.944 INFO 12620 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2024-02-25 11:49:31.944 INFO 12620 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.56] 2024-02-25 11:49:32.016 INFO 12620 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2024-02-25 11:49:32.016 INFO 12620 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 759 ms 2024-02-25 11:49:32.242 INFO 12620 --- [ main] c.a.d.s.b.a.DruidDataSourceAutoConfigure : Init DruidDataSource 2024-02-25 11:49:32.309 INFO 12620 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited _ _ |_ _ _|_. ___ _ | _ | | |\/|_)(_| | |_\ |_)||_|_\ / | 3.3.1 Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter. ,------. ,--. ,--. ,--. | .--. ' ,--,--. ,---. ,---. | '--' | ,---. | | ,---. ,---. ,--.--. | '--' | ' ,-. | | .-. | | .-. : | .--. | | .-. : | | | .-. | | .-. : | .--' | | --' \ '-' | ' '-' ' \ --. | | | | \ --. | | | '-' ' \ --. | | `--' `--`--' .`- / `----' `--' `--' `----' `--' | |-' `----' `--' `---' `--' is intercepting. 2024-02-25 11:49:32.765 INFO 12620 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2024-02-25 11:49:32.781 INFO 12620 --- [ main] com.hub.BizAApplication : Started BizAApplication in 1.861 seconds (JVM running for 2.476) BizAApplication模块启动成功!! Process finished with exit code -1
13总结:避坑记录:
13.1: pagehelper分页组件版本问题导致循环依赖报错原来版本为1.4.0.启动效果为:
解决方法:将分页组件版本改为1.4.1完美解决
13.2:数据库连接池参数错误导致报错:
数据库连接池参数为:com.mysql.jdbc.Driver
解决方法:将数据库连接池名称改为:com.mysql.cj.jdbc.Driver
到此这篇关于Maven和IntelliJ IDEA搭建多模块微服务的实现的文章就介绍到这了,更多相关Maven和IDEA搭建多模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!