基于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.0.0

com.hub

hub-example

1.0-SNAPSHOT

hub-dependencies

hub-common

hub-ware

pom

8

8

UTF-8

1.8

2.6.3

2021.0.1

2021.0.1.0

1.0-SNAPSHOT

2.6.3

5.1.47

1.1.23

1.4.1

2.2.0

3.3.1

1.18.18

1.2.83

5.7.22

3.12.0

2.11.0

org.springframework.boot

spring-boot-dependencies

${spring.boot.version}

pom

import

org.springframework.cloud

spring-cloud-dependencies

${spring.cloud.version}

pom

import

com.alibaba.cloud

spring-cloud-alibaba-dependencies

${spring.cloud.alibaba.version}

pom

import

src/main/resources

true

org.springframework.boot

spring-boot-maven-plugin

${spring.boot.maven.plugin.version}

true

true

env

dev

true

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文件中新增了标签即如下。即hub-example管理以下包含的模块。

hub-dependencies

hub-common

hub-ware

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">

hub-example

com.hub

1.0-SNAPSHOT

4.0.0

hub-dependencies

pom

hub-pf-a-dependencies

hub-pf-b-dependencies

8

8

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">

hub-example

com.hub

1.0-SNAPSHOT

4.0.0

hub-common

pom

example-common-entity

example-common-utils

8

8

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">

hub-example

com.hub

1.0-SNAPSHOT

4.0.0

hub-ware

pom

example-biz-a

example-biz-b

8

8

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">

hub-dependencies

com.hub

1.0-SNAPSHOT

4.0.0

hub-pf-a-dependencies

8

8

org.projectlombok

lombok

${lombok.version}

com.alibaba

fastjson

${fastjson.version}

org.apache.commons

commons-lang3

${commons.lang3.version}

commons-io

commons-io

${commons.io.version}

cn.hutool

hutool-all

${hutool.version}

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">

hub-dependencies

com.hub

1.0-SNAPSHOT

4.0.0

hub-pf-b-dependencies

8

8

mysql

mysql-connector-java

${mysql.version}

com.alibaba

druid-spring-boot-starter

${druid.version}

com.github.pagehelper

pagehelper-spring-boot-starter

${pagehelper.version}

com.baomidou

mybatis-plus-boot-starter

${mybatis-plus.version}

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">

hub-common

com.hub

1.0-SNAPSHOT

4.0.0

example-common-utils

8

8

com.hub

hub-pf-a-dependencies

${hub.example.version}

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">

hub-ware

com.hub

1.0-SNAPSHOT

4.0.0

example-biz-a

8

8

org.springframework.boot

spring-boot

org.springframework.boot

spring-boot-starter-web

com.hub

hub-pf-a-dependencies

${hub.example.version}

com.hub

hub-pf-b-dependencies

${hub.example.version}

jar

org.springframework.boot

spring-boot-maven-plugin

${spring.boot.maven.plugin.version}

true

true

repackage

11.2 example-biz-a打包成可执行Jar包

example-biz-a打包成可执行Jar包,则在pom.xml中添加配置。

jar

org.springframework.boot

spring-boot-maven-plugin

${spring.boot.maven.plugin.version}

true

true

repackage

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

相关阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。