本文发布时间:2023-05-03
本文旨在分享开始一个微服务项目时结构的搭建过程,只提供一种微服务项目的结构,并不涉及具体的业务逻辑。
尚在学习当中,如有不足,请指正!!!
项目架构
创建模块
父工程模块——cloud-parent
一个微服务项目最好有一个父工程模块,用来对整个项目的依赖统一管理
在我的demo中对其命名为cloud-parent,创建好这个模块后,删除除pom.xml之外的文件。
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ailj</groupId>
<artifactId>cloud-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>cloud-parent</name>
<description>cloud-parent</description>
<!-- 父工程打包方式为pom-->
<packaging>pom</packaging>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- 版本最好和此一致,否则会有兼容性问题,此处版本经测试确保可用-->
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
<spring-cloud.version>Hoxton.SR9</spring-cloud.version>
<spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>
</properties>
<!-- 使用dependencyManagement统一依赖管理-->
<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
</project>
微服务模块——cloud-goods
此模块为商品服务的父模块,继承cloud-parent模块,也包括cloud-goods-api等子模块。
创建模块后,只保留pom.xml文件
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-goods</artifactId>
<parent>
<groupId>com.ailj</groupId>
<artifactId>cloud-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 指定父模块pom.xml路径,默认为../pom.xml,即父工程的pom.xml文件位于当前目录下-->
<!-- 此处cloud-parent和cloud-goods同属于一个目录,所以需指定路径-->
<relativePath>../cloud-parent/pom.xml</relativePath>
</parent>
<!-- 父工程模块打包方式为pom-->
<packaging>pom</packaging>
<modules>
<module>cloud-goods-api</module>
</modules>
</project>
relativePath标签通俗的解释:如果子工程在父工程文件夹下,则可以不加;若子工程和父工程同级或位于其他路径,则需要加此标签指定路径。
微服务子模块——cloud-goods-api
cloud-goods-api模块是商品微服务的一个子模块,在cloud-goods模块中也可包含其他如service、model模块,此处只创建一个api模块以作示例。
cloud-goods-api模块相当于单体项目中的controller层,所以目录结构需保留。
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ailj</groupId>
<artifactId>cloud-goods</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>cloud-goods-api</artifactId>
<dependencies>
<!--cloud的基础环境包-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- nacos服务发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
</project>
还是要提醒依赖版本问题,否则会有一大堆问题出现(来自某个被折磨一下午的**的忠告)
创建bootstrap.yml文件
首先简要介绍bootstrap.yml和applicatin.yml的区别:
-
bootstrap.yml先加载,application.yml后加载
-
bootstrap.yml由spring cloud上下文配置加载,application.yml由spring boot配置加载
-
bootstrap.yml配置系统信息,如服务地址,application.yml配置应用信息,如自定义参数
具体信息可自行百度
bootstrap.yml文件中代码
server:
port: 9000 #端口号,可自定义
spring:
cloud:
nacos:
server-addr: {自己的nacosip地址}
discovery:
namespace: {自己的nacos命名空间}
group: {自己的组名} #通常用于区分项目
application:
name: goods-api #服务名称
profiles:
active: dev #运行环境(开发环境)
其他
启动类中不需要配置其他注解,在bootstrap.yml中指定了地址就可以注册到nacos。
最后运行启动类
出现
即为成功。