首页 > 其他分享 >springcloud入门-项目搭建

springcloud入门-项目搭建

时间:2024-10-21 19:59:56浏览次数:7  
标签:入门 -- spring boot springframework springcloud org cloud 搭建

本文主要供小白使用,详述 springcloud 项目在实战环境中如何搭建以及常见问题的解决方法,各微服务组件的具体使用及原理,后续我会逐步补充。本文后续论述均以如下环境为前提:

jdk: 1.8
spring-boot: 2.6.0
spring-cloud: 2021.0.9

一、公共组件搭建

1. parent 项目搭建

1)pom.xml 文件搭建,这里只列举一些常用的依赖,自己补充其他的:

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

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.0</version>
        <relativePath/>
    </parent>

    <groupId>org.example.demo</groupId>
    <artifactId>spring-boot-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <!-- 该项目只作为父项目供其他项目继承,所以这里使用 pom 打包类型 -->
    <packaging>pom</packaging>

    <name>common</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2021.0.9</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.6.0</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <!-- json 解析 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>2.0.53</version>
        </dependency>
        <!-- 测试方法 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 自动生成 getter,setter 等方法的插件 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- 引入 springboot 编译插件 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <!-- 选择性使用,默认只认 yaml、yml、properties 文件,当还需要使用到其他类型的文件时,建议加上 -->
        <resources>
            <resource>
                <filtering>true</filtering>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
    </build>
    
    <!-- profile 定义,在 applitaion.yaml 文件中通过 @profileActive@ 来获取当前激活 profile -->
    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <profileActive>dev</profileActive>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <profileActive>test</profileActive>
            </properties>
        </profile>
        <profile>
            <id>stag</id>
            <properties>
                <profileActive>stag</profileActive>
            </properties>
        </profile>
        <profile>
            <id>release</id>
            <properties>
                <profileActive>release</profileActive>
            </properties>
        </profile>
    </profiles>
</project>

2)构建完项目后,mvn clean install 到本地仓库即可使用。

2. common 项目搭建

common 项目用来存放其他微服务都会使用到的一些公共类、工具包、配置类、常量类、枚举类、异常处理类等公共资源,也可存放公共依赖配置。
1)pom.xml 公共依赖配置:

<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>
    <parent>
        <groupId>org.example.demo</groupId>
        <artifactId>spring-boot-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <artifactId>common</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>common</name>

    <dependencies>
        <!-- eureka 客户端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!-- 服务监控组件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- web 应用 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- feign 客户端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- 已踩坑:common 不作为 springboot 项目编译,所以这里忽略,否则打出来的包的公共类无法供其他微服务引用 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

3. 日志组件搭建

springboot 默认使用 logback 打印日志,配置方式有两种,简单点在 application.yaml 文件配置,复杂点在 logback-spring.xml 文件中配置,生产环境建议使用 logback-spring.xml
1)application.yaml 简单配置:

logging:
  file:
    # 当前打印日志文件位置
    name: ./logs/spring.log
  pattern:
    # 设置控制台打印格式,可使用默认值
    console: "${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"
    # 设置归档文件打印格式,可使用默认值
    file: "${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"
  charset:
    # 设置 file 字符
    file: UTF-8
    # 设置 console 字符
    console: UTF-8
  # 设置日志打印级别,常见的有 root、web、sql,也可自己指定某个类的打印级别
  level:
    web: trace
    root: trace
    # 自定义
    org.example.test.ServiceA: info
  # logback 设置
  logback:
    # 日志滚动策略
    rolling policy:
      # 每个文件大小
      max-file-size: 2MB
      # 所有文件大小
      total-size-cap: 10MB
      # 最大存储日志数
      max-history: 5
      # 日志归档文件格式
      file-name-pattern: "./logs/spring.%d{yyyy-MM-dd}.%i.log"

2)使用 logback-spring.xml 配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!-- scan: 若扫描到配置文件发生变化,则重新加载,默认为 true -->
<!-- scanPeriod: 扫描间隔,默认单位毫秒,默认间隔 1 分钟,只有当 scan 为 true 时生效 -->
<configuration scan="true" scanPeriod="10 seconds">
    <!-- 变量定义 -->
    <!-- 定义 logger 变量,通过 ${} 来获取变量值 -->
    <property name="LOG_FILE" value="./logs/spring.log"/>
    <property name="LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN" value="${LOG_PATH}/spring.%d{yyyy-MM-dd}.%i.log" />
    <!-- 获取 spring 环境变量并重命名,source 表示 spring 变量名,示例为获取 applicaiton.yaml 文件中的变量 logging.file.name -->
    <springProperty scop="context" name="file.name" source="logging.file.name" defaultValue="./logs/spring.log"/>

    <!-- 日志打印格式-->
    <!-- 控制台彩色日志打印格式:${VARIABLE_NAME:-DEFAULT_VALUE}: 获取变量 VARIABLE_NAME,若无值则取 DEFAULT_VALUE
        %clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} :日期格式,{faint} 为颜色
        %clr(${LOG_LEVEL_PATTERN:-%5p}) :日志级别,五个字符,不够左侧补空格
        %clr(${PID:- }){magenta}:进程 PID
        %clr(---){faint}:分隔符,为了美观规整
        %clr([%15.15t]){faint}:线程名,长度小于 15 左侧补空格,大于 15 截断尾部长出字符
        %clr(%-40.40logger{39}){cyan}:日志名
            %-40.40:同线程名规则
            %logger{39}:日志名,一般为日志所在类或包名
        %clr(:){faint} %m%n:日志内容(%m)+ 换行(%n)
        ${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}:异常打印
    -->
<!--    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    <!--  文件日志格式不支持颜色 -->
<!--    <property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

    <!-- 引入默认配置 -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
    <include resource="org/springframework/boot/logging/logback/file-appender.xml" />

    <!-- 自定义日志滚动策略,对应 application.yaml 中的 rolling policy -->
<!--    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
<!--        <encoder>-->
<!--            <pattern>${FILE_LOG_PATTERN}</pattern>-->
<!--            <charset>${FILE_LOG_CHARSET}</charset>-->
<!--        </encoder>-->
<!--        <file>${log.dir}/spring.log</file>-->
<!--        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">-->
<!--            <fileNamePattern>${log.dir}/spring-%d{yyyy-MM-dd}.%i.log</fileNamePattern>-->
<!--            <maxFileSize>100MB</maxFileSize>-->
<!--            <totalSizeCap>10GB</totalSizeCap>-->
<!--            <maxHistory>30</maxHistory>-->
<!--        </rollingPolicy>-->
<!--    </appender>-->

    <!-- 异步写,底层使用内存 buffer,可提高性能,生产环境建议配置 -->
    <appender name="FILE_ASYNC" class="ch.qos.logback.classic.AsyncAppender" immediateFlush="false" neverBlock="true">
        <!-- 0:不丢失日志,10:若队列的 90% 已满,则丢弃 TRACT、DEBUG、INFO 级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 队列深度,默认值 256 -->
        <queueSize>1024</queueSize>
        <!-- 队列已满是否阻塞调用者,true 表示不阻塞 -->
        <neverBlock>true</neverBlock>
        <!-- 指定使用异步写的 appender,只能添加一个 -->
        <appender-ref ref="FILE"/>
    </appender>
    
    <!-- 若在 maven 文件指定了 profile 集,可为不同环境下的日志配置不同策略 -->
    <springProfile name="dev,test,stag">
        <!-- 自定义某个类或包的日志策略,additivity 表示日志消息是否传递到 root 等父日志记录器,即 root 是否也打印该日志,false 表示不传递,true 表示传递,默认 true -->
        <logger name="org.example.test.TestService" level="warn" additivity="false">
            <appender-ref ref="FILE_ASYNC_HTTPTRACE" />
        </logger>
        <!-- 设置顶层日志记录器的日志级别 -->
        <root level="info">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="FILE_ASYNC"/>
        </root>
    </springProfile>
    <springProfile name="release">
        <root level="info">
            <appender-ref ref="FILE_ASYNC"/>
        </root>
    </springProfile>
</configuration>

3)logbook 使用:logbook 可以记录 http 日志,并可以指定打印的 http 格式。
在项目中引入依赖:

<dependency>
    <groupId>org.zalando</groupId>
    <artifactId>logbook-spring-boot-starter</artifactId>
    <version>2.10.0</version>
</dependency>

applition.yaml 文件中配置:

 logbook:
  # 包括哪些路径
  include: 
    - /**
  # 不包括哪些路径
  exclude: 
    - /v1/test/a
  # 打印格式,有 curl、http、json、splunk 四个选项
  format:
    style: curl
  # 敏感头,将会打印为 ***,还可设置敏感路径,敏感参数
  obfuscate:
    headers: Authorization

二、应用组件搭建

正常微服务应用,直接引用上边搭建的公共组件即可。
1)pom.xml 文件配置:

<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>
    <parent>
        <groupId>org.example.demo</groupId>
        <artifactId>spring-boot-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <artifactId>service-a</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>service-a</name>

    <dependencies>
        <dependency>
            <groupId>org.example.demo</groupId>
            <artifactId>common</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

2)服务 applitiaon.yaml 配置:

server:
  port: 8081
spring:
  application:
    name: serviceA
eureka:
  instance:
    hostname: ${spring.cloud.client.ip-address}
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
  client:
    fetch-registry: true
    register-with-eureka: true
    registry-fetch-interval-seconds: 30
    healthcheck:
      enabled: true
    service-url:
      defaultZone: http://localhost:8080/eureka/
logbook:
  include:
    - /**
  exclude:
    - /v1/test/a
  format:
    style: curl
  obfuscate:
    headers: Authorization

3)启动类配置:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

@EnableFeignClients
@SpringBootApplication
public class ServiceAApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceAApplication.class, args);
    }
}

标签:入门,--,spring,boot,springframework,springcloud,org,cloud,搭建
From: https://www.cnblogs.com/aizen-sousuke/p/18470166

相关文章

  • Altium Designer 入门基础教程(一)
     有将近一个半月没有更新过博客了,最近在整理AltiumDesigner 入门基础教程,希望喜欢本系列教程的小伙伴可以点点关注和订阅!下面我们开始进入AltiumDesigner课程的介绍。一、AltiumDesigner快捷键1.原理图快捷键: 2.PCB快捷键:  3.自定义快捷键(原理图、......
  • ctfshow-web入门-信息搜集(14)
    1.根据提示:有时候源码里面就能不经意间泄露重要(editor)的信息,默认配置害死人2.我们直接在url后面添加/editor,在flash上传空间里面找到文件空间,爆出了一堆目录3.最终我们在var/www/html/nothinghere/fl000g.txt这个路径找的到了flag,我们在url后面添加nothinghere/fl000g.......
  • ctfshow-web入门-信息搜集(16)
    1.根据题目提示:考察PHP探针php探针是用来探测空间、服务器运行状况和PHP信息用的,探针可以实时查看服务器硬盘资源、内存占用、网卡流量、系统负载、服务器时间等信息。url后缀名添加/tz.php版本是雅黑PHP探针,然后查看phpinfo搜索flag2.在url后面添加上/tz.php3.点击PHPIN......
  • nfs服务器搭建
    1.dpkg-snfs-kernel-server 查看是否已经安装了nfs服务器2.若未安装sudoapt-getinstallnfs-kernel-server3.sudovi/etc/exports修改nfs服务配置文件4.增加一行/nfsdir*(rw,sync,no_subtree_check,no_root_squash)  这一行的意思就是把/nfsdir作为nfs工作目录  ......
  • MongoDB 5 安装&副本集搭建&集群搭建
    单节点安装需要一个数据目录地址,一个日志文件地址,配置文件##数据目录地址--dapath=##日志文件--logpath=##配置文件--config=***.conf下载https://fastdl.mongodb.org/osx/mongodb-macos-x86_64-5.0.27.tgz启动命令/data/dba/yanhao/application/mongodb/bin/mong......
  • Java消息队列入门详解
    什么是消息队列?消息队列的产生主要是为了解决系统间的异步解耦与确保最终一致性。在实际应用场景中,往往存在一些主流程操作和辅助流程操作,其中主流程需要快速响应用户请求,而辅助流程可能涉及复杂的处理逻辑或者依赖于外部服务。通过将这些辅助流程的消息放入消息队列,使得它们可......
  • P6189 [NOI Online #1 入门组] 跑步(分拆数)
    简要题意给你一个整数\(n\),你需要求\(\sum_{i=1}^nx_i=n\)且\(x_i\lex_{i+1}\)的非负整数解数量对给定模数\(p\)取模后的结果。\(n\le10^5\)分析考虑一个显然的DP:设\(f_{i,j}\)表示考虑\(1\simi\)这些数,总和为\(j\)的方案数。转移是完全背包型转移:\(f_{i,j}......
  • 长链剖分 入门
    长链剖分额,其实和树剖差不多,对于每个节点\(u\)维护\(mxd_u\)为子树内节点深度最大值。那么令\(Son(u)\)里取到\(mxd_v\)最大的儿子\(v\)为长儿子,类似重链剖分处理即可。同样令连接不同长链的两个点之间的边为虚边。有如下性质:从根到节点\(u\),所经过虚边个数不超......
  • cubemx modbus从机搭建
    目录1.硬件准备2.CubeMX配置步骤3.集成Modbus协议栈步骤:4.编写应用代码5.测试通信代码示例6.进一步优化使用CubeMX实现Modbus丛集(Slave)的开发主要涉及到以下几个步骤:1.硬件准备你需要一块支持Modbus通信的STM32开发板,建议使用带有USART外设的......
  • webpack入门一篇
    1、webpack生命周期Webpack构建过程是生命周期的概念,主要包括以下几个阶段:1.1:初始化从配置文件和shellarguments读取参数,初始化Compiler对象。根据配置文件中的entry,确定构建的入口文件。1.2:配置解析配置文件,合并shellarguments和plugin定义的默认配置,得到最终配置。......