基于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
文章来源:https://www.toymoban.com/news/detail-842725.html
解决方法:将数据库连接池名称改为:com.mysql.cj.jdbc.Driver文章来源地址https://www.toymoban.com/news/detail-842725.html
到了这里,关于基于Maven和IntelliJ IDEA搭建多模块微服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!