基于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文件的标签值。
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">
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文件中新增了
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。
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">
6.hub-common添加模块
根据5.hub-dependencies添加模块的步骤:
给hub-common添加example-common-entity和example-common-utils模块。
6.1 hub-common工程的pom.xml
添加模块后,hub-common工程的pom.xml。
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">
7.hub-ware添加模块
根据5.hub-dependencies添加模块的步骤:
给hub-ware添加example-biz-a和example-biz-b模块。
7.1 hub-ware工程的pom.xml
添加模块后,hub-ware工程的pom.xml。
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">
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包。
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">
9.2 hub-pf-b-dependencies依赖
hub-pf-a-dependencies依赖,主要是操作数据库的Jar包。
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">
10.hub-common的子模块添加依赖
为hub-common模块的子模块example-common-entity和example-common-utils模块添加依赖。
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">
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中已经引入顶级依赖。在子工程中使用其模块,可以不需要加版本号。
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">
11.2 example-biz-a打包成可执行Jar包
example-biz-a打包成可执行Jar包,则在pom.xml中添加配置。
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
好文链接
发表评论