Spring Cloud 微服务简单搭建 使用Maven

Posted _DiMinisH

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud 微服务简单搭建 使用Maven相关的知识,希望对你有一定的参考价值。

1. 各组件版本

jdkSpring CloudSpring Cloud AlibabaSpring Bootnacossentinelzipkin
OpenJDK 11Hoxton.SR82.2.1.RELEASE2.3.3.RELEASE1.3.21.8.02.23.15

2. 创建父工程

(1). 创建Maven项目

(2). 选择JDK 11 和 Maven项目

(3). 项目命名

(4). 完成

(5). 删除src目录

因为父工程不写代码, 所有删除不影响

(6). 引入依赖

    <dependencyManagement>
<!--        Spring Boot-->
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.3.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            
<!--            Spring Cloud-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR8</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

<!--            Spring Cloud Alibaba-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


添加<packaging></packaging>

(7). 引入Maven打包配置

<!--    maven插件-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                    <addResources>true</addResources>
                </configuration>
            </plugin>
        </plugins>
    </build>

3. 创建子模块

(1). 创建Maven项目


按照父工程的创建过程, 名字按照自己的需要来

点开父工程pom, 可以直接看到自动加入了module

(2). 根据需要引入依赖

1). Spring MVC

<!--        Spring MVC-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

2). 数据库驱动

<!--        数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

3). nacos注册中心服务发现

<!--        nacos注册中心服务发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

4). nacos注册中心配置

<!--        nacos注册中心配置-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

5). Feign

<!--        feign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

6). Sentinel

<!--        sentinel-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

7). Spring Cloud sleuth

<!--       Spring Cloud sleuth-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
        </dependency>

8). Zipkin

<!--        zipkin-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency>

9). Gateway

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

4. 创建另一个子模块 (子模块依赖子模块)

(1). 创建Maven项目

按照相同的步骤创建

(2). 子模块依赖子模块

order900 依赖 common

        <dependency>
            <groupId>org.example</groupId>
            <artifactId>common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>


注意

groupId
artifactId
version

要与引入的子模块一致

(3). 测试

测试一下是否可以打包成功

1). clean

在父工程的pom下, 选择clean, 清理一下

BUILD SUCCESS 表示成功

此时的目录如下

2). package


BUILD SUCCESS

看看目录

出现了jar文件
这个就是用来部署到服务器上的

5. Mybatis依赖引入

(1). 父工程引入依赖

<!--            mybatis-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.1.2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>


引入后刷新一下Maven

(2). 子模块引入依赖

        <!--        mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>



测试一下成不成功

6. 依赖需要的相关常用配置 (.properties)

(1). 一般的配置

# 启动端口, 默认是8080
server.port=9003
# 应用的名称
spring.application.name=video-service

(2). 数据库驱动配置

# 数据库驱动名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据库的url
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/cloud_video?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
# 数据库用户名和密码
spring.datasource.username=root
spring.datasource.password=123456

(3). nacos注册中心服务发现

# nacos注册中心地址
spring.cloud.nacos.discovery.server-addr=192.168.100.130:8848
# 使用的命名空间
spring.cloud.nacos.discovery.namespace=SpringCPQuestion
# 发现服务
spring.cloud.nacos.discovery.service=$spring.application.name
# 分组
spring.cloud.nacos.group=DEFAULT_GROUP

(4). nacos注册中心配置

bootstrap.properties中配置

# 应用的名称
spring.application.name=video-service
# nacos配置中心地址
spring.cloud.nacos.config.server-addr=192.168.100.130:8848
# 使用的配置文件类型
spring.cloud.nacos.config.file-extension=properties
# 文件后缀
spring.profiles.active=dev

上述配置在注册中心添加配置文件时, 应该以下图方式命名

spring.application.name-spring.profiles.active

(5). Sentinel

# sentinel控制台端口
spring.cloud.sentinel.transport.dashboard=192.168.100.130:8080
# 与sentinel通信的端口
spring.cloud.sentinel.transport.port=9999

(6). Feign

# 开启feign对sentinel的支持
feign.sentinel.enabled=true

(7). Zipkin

1). 配置

# zipkin地址
spring.zipkin.base-url=http://192.168.100.130:9411/
# 不⽤开启服务发现
spring.zipkin.discovery-client-enabled=false

2). 指定数据库启动:

java -jar zipkin-server-x.xx.x-exec.jar --STORAGE_TYPE=mysql --MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_DB=数据库名字 --MYSQL_USER=root --MYSQL_PASS=数据库密码

3). 指定的数据库建表语句

 CREATE TABLE IF NOT EXISTS zipkin_spans (
        `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this
means the trace uses 128 bit traceIds instead of 64 bit',
        `trace_id` BIGINT NOT NULL,
		`id` BIGINT NOT NULL,
		`name` VARCHAR(255) NOT NULL,
`parent_id` BIGINT,
`debug` BIT(1),
`start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs
query and to implement TTL',
`duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration
and maxDuration query'
    ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE
utf8_general_ci;
    ALTER TABLE zipkin_spans ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `id`)
COMMENT 'ignore insert on duplicate';
ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`, `id`) COMMENT 'for joining with zipkin_annotations';
    ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for
getTracesByIds';
    ALTER TABLE zipkin_spans ADD INDEX(`name`) COMMENT 'for getTraces and
getSpanNames';
    ALTER TABLE zipkin_spans ADD INDEX(`start_ts`) COMMENT 'for getTraces
ordering and range';
    CREATE TABLE IF NOT EXISTS zipkin_annotations (
        `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this
means the trace uses 128 bit traceIds instead of 64 bit',
        `trace_id` BIGINT NOT NULL COMMENT 'coincides with
zipkin_spans.trace_id',
`span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id',
        `a_key` VARCHAR(255) NOT NULL COMMENT 'BinaryAnnotation.key or
Annotation.value if type == -1',
        `a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller
than 64KB',
`a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if
Annotation',
        `a_timestamp` BIGINT COMMENT 'Used to implement TTL;
Annotation.timestamp or zipkin_spans.timestamp',
        `endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is
null',
        `endpoint_ipv6` BINARY(16) COMMENT 'Null when Binary/Annotation.endpoint
is null, or no IPv6 address',
        `endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint
is null',
        `endpoint_service_name` VARCHAR(255) COMMENT 'Null when
Binary/Annotation.endpoint is null'
    ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE
utf8_general_ci;
ALTER TABLE zipkin_annotations ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp`) COMMENT 'Ignore insert on duplicate';
    ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`,
`span_id`) COMMENT 'for joining with zipkin_spans';
    ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`)
COMMENT 'for getTraces/ByIds';
ALTER TABLE zipkin_annotations ADD INDEX(`endpoint_service_name`) COMMENT 'for getTraces and getServiceNames';
ALTER TABLE zipkin_annotations ADD INDEX(`a_type`) COMMENT 'for getTraces';
    ALTER TABLE zipkin_annotations ADD INDEX(`a_key`) COMMENT 'for getTraces';
    ALTER TABLE zipkin_annotations ADD INDEX(`trace_id`, `span_id`, `a_key`)
COMMENT 'for dependencies job';
    以上是关于Spring Cloud 微服务简单搭建 使用Maven的主要内容,如果未能解决你的问题,请参考以下文章

简单Spring Cloud 微服务框架搭建

使用Spring Cloud搭建微服务

Spring Cloud 入门教程 - 搭建配置中心服务

spring cloud微服务搭建

maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目

使用 IDEA 从 0 开始搭建 Spring Cloud 微服务