04-Springbooot与Spring Cloud Alibaba搭建后端架构

news2024/11/25 6:32:39

1、创建Springbooot父工程

1.1、使用快速创建Springbooot工程的方式:

 

 1.2、项目使用Maven进行管理

settings.xml,配好了阿里镜像

02-maven的安装配置_NikoWord的博客-CSDN博客

2、项目初始化配置

01-IDEA使用技巧_NikoWord的博客-CSDN博客

04-设置idea编码、编译_NikoWord的博客-CSDN博客

3、关联Git远程仓库

01-IDEA使用技巧_NikoWord的博客-CSDN博客

02-git使用命令的方式_NikoWord的博客-CSDN博客

4、新增member会员子模块

 

5、使用LogBack实现日志的相关配置

在member模块的resources下创建logback-spring.xml文件:

<?xml version="1.0" encoding="UTF-8"?>

<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,
        则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。
        当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds" >



    <!-- log日志文件输出的路径   修改一下路径  -->
    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。
            定义变量后,可以使“${}”来使用变量。 -->
    <property name="PATH" value="./log/member"></property>


<!--    输出到控制台-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
        <!-- 例如:如果此处配置了INFO级别,则后面其他位置即使配置了DEBUG级别的日志,也不会被输出 -->
<!--        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">-->
<!--            <level>INFO</level>-->
<!--        </filter>-->

        <encoder>
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) %blue(%-50logger{50}:%-4line) %thread %green(%-18X{LOG_ID}) %msg%n</Pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>


<!--    项目所有的日志都会在这里TRACE_FILE-->
    <appender name="TRACE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${PATH}/trace.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${PATH}/trace.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <layout>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-18X{LOG_ID}) %msg%n</pattern>
        </layout>
    </appender>

    <!-- 时间滚动输出 level为 ERROR 日志 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${PATH}/error.log</file>

        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${PATH}/error.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--设置日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>

<!--        日志文件输出格式-->
        <layout>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-18X{LOG_ID}) %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </layout>

        <!-- 此日志文件只记录ERROR级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

<!--    INFO 和 WARN是粘贴的其他的-->
    <!--输出到文件-->
    <!-- 时间滚动输出 level为 INFO 日志 -->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${PATH}/info.log</file>
        <!--日志文件输出格式-->
        <encoder>
<!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-18X{LOG_ID}) %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天日志归档路径以及格式 -->
            <fileNamePattern>${PATH}/info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文件只记录info级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 时间滚动输出 level为 WARN 日志 -->
    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${PATH}/warn.log</file>

        <!--        日志文件输出格式-->
        <!--        springboot3 使用的方式-->
        <layout>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-18X{LOG_ID}) %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </layout>

        <!--日志文件输出格式-->
<!--        springboot2 使用的方式-->
<!--        <encoder>-->
<!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>-->
<!--            <charset>UTF-8</charset> &lt;!&ndash; 此处设置字符集 &ndash;&gt;-->
<!--        </encoder>-->
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${PATH}/warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文件只记录warn级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>


    <!--
            <logger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。
            <logger>仅有一个name属性,
            一个可选的level和一个可选的addtivity属性。
            name:用来指定受此logger约束的某一个包或者具体的某一个类。
            level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
                  如果未设置此属性,那么当前logger将会继承上级的级别。
        -->
    <!--
        使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
        第一种把<root level="INFO">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
        第二种就是单独给mapper下目录配置DEBUG模式,代码如下,这样配置sql语句会打印,其他还是正常DEBUG级别:
     -->
    <!--开发环境:打印控制台-->
<!--    <springProfile name="dev">-->
        <!--可以输出项目中的debug日志,包括mybatis的sql日志-->
<!--        <logger name="com.wei" level="INFO" />-->

        <!--
            root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
            level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,默认是DEBUG
            可以包含零个或多个appender元素。
        -->

        <root level="WARN">
            <appender-ref ref="WARN_FILE" />
        </root>
        <root level="ERROR">
            <appender-ref ref="ERROR_FILE" />
        </root>

        <root level="TRACE">
            <appender-ref ref="TRACE_FILE" />
        </root>

        <root level="INFO">
            <appender-ref ref="STDOUT" />
        </root>

<!--    </springProfile>-->


    <!--生产环境:输出到文件-->
<!--    <springProfile name="pro">-->

<!--        <root level="INFO">-->
<!--            <appender-ref ref="STDOUT" />-->
<!--        </root>-->
<!--    </springProfile>-->




</configuration>

6、使用Http Client完成测试接口

在父工程中创建一个http文件夹,新建文件member-test.http,名字随意,但是一定要以http结尾,

#测试接口 get方法使用gtr快捷键
GET http://localhost:8001/member/hello
Accept: application/json

 7、增加AOP打印请求参数和返回结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/608820.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VS2010 C语言DLL项目hello world程序以及win32控制台程序调用dll示例

一、使用Visual Studio 2010编写C语言 DLL项目hello world程序 1.点击桌面 VS2010 图标&#xff0c;运行程序。(或者通过菜单栏打开程序) 2.点击【文件】 -> 【新建】 -> 【项目】 3.点击【VisualC】和【win32控制台应用程序】&#xff0c;设置好名称和存储位置&#xf…

白盒测试方法

为什么要进行白盒测试&#xff1f; 如果所有软件错误的根源都可以追溯到某个唯一原因&#xff0c;那么问题就简单了。然而&#xff0c;事实上一个bug 常常是由多个因素共同导致的&#xff0c;如下图所示。 黑盒查不到的问题 假设此时开发工作已结束&#xff0c;程序送交到测试…

飞腾FT2000实战开发-GPIO的配置

目录 环境&#xff1a; 飞腾GPIO介绍&#xff1a; 临时配置&#xff1a; 永久配置&#xff1a; 环境&#xff1a; CPU:FT2000&#xff08;64位&#xff0c;四核&#xff09; 操作系统&#xff1a;linux-4.4.131-20200710 内核&#xff1a;kylin4.0.2 飞腾GPIO介绍&#x…

JavaScript创建二维数组踩坑记录

需求&#xff1a;创建一个m*n且元素值为0的二维数组 碎碎念 1、 今天刷Leetcode时&#xff0c;遇见一个这样的需求&#xff0c;机智如我&#xff0c;定然不会通过双重for循环来创建&#xff0c;于是&#xff0c;我写了这样一行代码 const dimensionalArray new Array(m).fi…

Spring Boot 加载自定义配置文件

文章目录 一、为什么需要加载自定义配置文件二、使用PropertySource加载自定义配置文件&#xff08;一&#xff09;创建Spring Boot项目&#xff08;二&#xff09;创建自定义配置文件&#xff08;三&#xff09;创建自定义配置类&#xff08;四&#xff09;编写测试方法&#…

硅谷甄选 Blog_01-搭建后台管理系统模板

搭建后台管理系统模板分为两大步骤&#xff1a; 项目初始化项目配置 项目初始化 环境准备 node&#xff1a;v16.16.0pnpm&#xff1a;v7.22.0 初始化项目 全局安装pnpm指令&#xff1a; npm i -g pnpm项目初始化指令&#xff1a; pnpm create vite如下图所示进行项目的…

嵌入式BSP工程师基本任务分析

到底什么是BSP工程师呢&#xff1f;来看这篇文章吧 一、嵌入式系统 要明白什么是嵌入式软件工程师&#xff0c;我们先从嵌入式系统&#xff08;嵌入式设备&#xff09;说起。维基百科上对嵌入式系统的定义如下&#xff1a; 嵌入式系统&#xff08;Embedded System&#xff0…

5 个强大的 HTML5 API

HTML5提供了一些非常强大的JavaScript和HTML API&#xff0c;来帮助开发者构建精彩的桌面和移动应用程序。本文将介绍5个新型的API&#xff0c;希望对你的开发工作有所帮助。 1. 全屏API&#xff08;Fullscreen API&#xff09; 该API允许开发者以编程方式将Web应用程序全屏运…

1_标准IO

目录 标准I/O一、概念二、特点⭐⭐⭐三、缓冲区⭐⭐⭐3.1 全缓冲3.1 行缓冲3.3 不缓冲 四、函数接口⭐⭐⭐⭐4.1 打开4.1.1 fopen4.1.2 freopen4.1.2 容错机制perror 4.2 关闭4.2.1 fclose4.3 读写操作4.3.1 字符I/O4.3.2 行I/O4.3.3 块I/O 4.4 定位操作4.5 文件结束和错误 标准…

多维时序 | MATLAB实现NARX非线性自回归外生模型多变量多步时间序列预测(电池预测模型)

多维时序 | MATLAB实现NARX非线性自回归外生模型多变量多步时间序列预测(电池预测模型) 目录 多维时序 | MATLAB实现NARX非线性自回归外生模型多变量多步时间序列预测(电池预测模型)效果一览基本介绍模型描述程序设计参考资料效果一览 基本介绍 多维时序 | MATLAB实现NARX非…

CSDN 周赛 56 期

CSDN 周赛 56 期 1、题目名称&#xff1a;因数-数字游戏骗分抛出异常考试时代码 2、题目名称&#xff1a;津津的储蓄计划3、题目名称&#xff1a;一维数组的最大子数组和4、题目名称&#xff1a;莫名其妙的键盘小结 1、题目名称&#xff1a;因数-数字游戏 小Q的柠檬汁做完了。 …

为视图增加权重以调整基本线性布局

乍看上去线性布局LinearLayout很基础&#xff0c;不太灵活&#xff0c;毕竟其只是按照某种顺序摆放视图。但是还可以使用另外一些属性调整布局的外观。 编写一个不太一样的布局。这个布局让按钮显示在布局的右下角&#xff0c;其余全部空间由一个可编辑文本域占据。 一个基本线…

算法套路十九——树形DP

算法套路十九——树形DP 树形 DP&#xff0c;即在树上进行的 DP。由于树固有的递归性质&#xff0c;这里的DP是指是一种通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法&#xff0c;故虽然带有DP&#xff0c;但一般都是通过递归来进行。 算法示例一&#xff1a;…

centos7使用docker compose部署ELK

说明&#xff1a;1、一定要先不要配置那么多配置文件&#xff0c;去除掉一些&#xff0c;先让docker compose启动相关服务能访问的时候&#xff0c;使用拷贝方法&#xff0c;把相关的配置文件拷贝出来在外面修改&#xff0c;这样保险一些&#xff0c;不然容易配置文件错误无法启…

90.构建 “工作流程 “第一部分

记得我们上次实现的页面的了么&#xff0c;如下图所示&#xff0c;这节我们接着来 记住我们之前的画的草图 现在我们就来构建Z字形的工作流程部分&#xff1b; ● 首先我们添加标题 工作流程 3个简单的步骤制作您每天的健康饮食 ● 接着就是添加Z字形的工作步骤 <div cl…

Visual Studio Code 下载安装教程(含必备插件)

文章目录 下载安装插件列表 下载 点击进入 VSCode 官网&#xff1a;https://code.visualstudio.com/&#xff0c;并点击右侧箭头&#xff0c;选择对应的版本&#xff0c;点击下载&#xff08;以Windows 版本为例&#xff09;&#xff1a; 等待下载完成&#xff1a; 安装 双击…

01人工智能导论概念总结

文章目录 第一章第六章第八章 第一章 人工智能&#xff1a;又称为机器智能&#xff08;Machine Intelligence&#xff0c;MI&#xff09;&#xff0c;主要研究用人工的方法和技术开发智能机器或智能系统&#xff0c;以模仿、延伸和扩展人类智能、生物智能、自然智能&#xff0…

Jenkins+RF持续集成测试(一) 环境搭建

通常在自动化测试中&#xff0c;我们需要对自动化测试用例定时构建&#xff0c;并生成报告并通过邮件发给指定的人。最佳工具选择莫过于Jenkins了。通过Jenkins集成robot framework插件&#xff0c;我们能非常方便的定时从git/svn上拉取最新的自动化测试用例&#xff0c;然后执…

MyBatis 学习笔记

MyBatis学习笔记 1、简介1.1、什么是MyBatis1.2、持久化1.3、持久层1.4、为什么需要MyBatis 2、MyBatis第一个程序2.1、搭建环境2.2、创建一个模块2.3、编写代码2.4、编写测试类 3、CRUD3.1、namespace3.2、select3.3、insert3.4、update3.5、delete3.6、分析错误3.7、万能Map3…

【内存操作函数】字符串函数不敢干的事,我干!

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C语言学习分享⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多C语言知识   &#x1f51d;&#x1f51d; 内存操作函数 1. 前言&#x1f6a9…