还在crud?快来学习架构设计啦---微服务下的依赖管理(maven篇)

news2024/10/4 11:25:00

文章目录

  • 一、前言
  • 二、实战
    • 2.1 创建父工程统一依赖的版本管理
    • 2.2 创建公共使用的 common工程
    • 2.3 创建子工程并引入父工程的依赖以及公共工程
    • 2.4 搭建启动环境
    • 2.5 启动程序开始验证
  • 三、总结

一、前言

2023年口罩放开的第一年,大多数人都是想着重新开始,抓住金三银四的好时机,找到心仪的工作和符合岗位要求的人才,一起整装出发。我们理想的状态是,经济已经在恢复了,那么就业市场也应该恢复了。然而现实是残酷的,海投无回应依然是常态。据互联网第三方平台统计,企业用人需求每月新增10万+,Java人才缺口高达42.5万,并以每年20%左右的速度增长。然而招聘市场却割裂严重,HR抱怨招人难,程序员抱怨拿不到offer。这是为何?拨开现象看本质:无非是双方需求错位。
在IT业发展初始阶段,初级Java程序员足以满足企业需求,但IT业发展至今,行业细分越发精细,企业需求也随时改变,要求程序员 “来之即用”,拥有更多解决复杂问题的能力。

最直观的表现就是,企业招聘要求再度提高,并在薪资上不断加码。

以下是字节2020年和2022年发布的Java程序员招聘启事:
在这里插入图片描述
单从招聘启事上可以看出,想要在2022年找到和2020年薪资、级别差不多的工作,Java程序员需要更加丰富的技能。(只会curd是不可能找到好工作了 表情包
互联网的已经今非昔比了,迭代极快,在这过程中,公司业务可能会发生颠覆式的调整,技术栈会随之改变。这仅仅是一家公司,互联网行业包罗万象,整体产品创新、迭代速度极快。随着新行业、新技术、新产品的出现,相应的业务需求也会不断衍生。

互联网行业 “不进则退,慢进亦退”,程序员亦是如此。对于用人要求持续增高的互联网企业来说,高级Java程序员才是当下市场最紧缺的。只会crud程序员 很有可能被现在的 GPT们(chatGPT,GPT4.0)取代了。可以看一下我之前让chatGPT 给我写的python程序,不得不说太厉害了。chatGPT对于一个python初学者有什么用?
前摇略长了 咳咳 表情包,接下来我们开始步入正题。maven想必大家都用过,不过一般我们一般做项目的时候,都是架构师搭好了框架,我们进去进行 crud 补充点业务逻辑就行了,长此以往,我们的架构设计能力就废了,当我们想跳槽涨薪时,毫无竞争力,故我们需要在工作之余学习一些架构设计相关的东西,比如我们最常用的依赖工具maven,maven的使用很简单。但是想用好还是需要一些学习的,本文将从现在的流行的微服务框架springcloud 依赖管理切入,深入剖析一些大厂微服务的包管理应该是怎么样的。

二、实战

学一门技术的最好的就是去官方文档里看看,比如我们要学习 SpringCloud 就可以看以下几个资源:

  • springcloud的官网:https://spring.io/cloud
  • springcloud官方文档:https://spring.io/projects/spring-cloud

我们在springcloud官方文档的 overview 中可以看到spring官方是如何建议我们使用的springcloud:
图一:
在这里插入图片描述
如上图所示这是让我们先引入 springcloud包管理依赖的pom,这种写法并不会把springcloud 的所有包依赖引入我们的工程,相当于一个声明。当你的工程里需要用到某一个依赖的时候,只要需要像下图一样写上需要引入的包的 <groupId><artifactId>.
在这里插入图片描述
可能有的友友就有点好奇这里我们并没有指定版本,maven能成功引入吗?表情包,其实是能引入成功的,因为我们在第一步的 引入 springcloud包管理依赖的pom 已经帮我们定义好了 springcloud <version> .

2.1 创建父工程统一依赖的版本管理

这里拿一个我写过的项目做介绍,这是一个建议的商城项目,源代码地址: https://gitee.com/T-OPEN/skywalking-demo

  • ratel-skywalking-common 项目的公共包,用来存放通用的工具类以及需要在各个服务之间需要传递的实体类。
  • ratel-skywalking-gateway 网关。
  • ratel-skywalking-goods 商品服务。
  • ratel-skywalking-order 订单服务。订单服务会调用商品服务,来获取某一个订单里包含的商品详情。
  • ratel-skywalking-notice 通知服务。
    在这里插入图片描述

首选我们我们需要新建一个空的父工程用来管理pom,这里使用dependencyManagement统一管理子模块的依赖版本,版本号使用获取方式,方便后期修改维护:

<?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>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.ratel.skywalking</groupId>
    <artifactId>ratel-skywalking-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>ratel-skywalking-parent</name>
    <description>Demo of Spring Cloud project for skywalking</description>

    <packaging>pom</packaging>

    <modules>
        <module>ratel-skywalking-common</module>
        <module>ratel-skywalking-gateway</module>
        <module>ratel-skywalking-goods</module>
        <module>ratel-skywalking-order</module>
        <module>ratel-skywalking-notice</module>
    </modules>

    <properties>
        <skywalking.demo.verion>0.0.1-SNAPSHOT</skywalking.demo.verion>
        <java.version>1.8</java.version>
        <spring.boot.version>2.3.12.RELEASE</spring.boot.version>
        <spring.cloud.version>Hoxton.SR12</spring.cloud.version>
        <spring.cloud.alibaba.version>2.2.8.RELEASE</spring.cloud.alibaba.version>
        <lombok.version>1.18.20</lombok.version>
        <hutool.version>5.8.11</hutool.version>
        <skywalking.version>8.9.0</skywalking.version>
        <knife4j.version>3.0.3</knife4j.version>
        <ratel-skywalking.verion>0.0.1-SNAPSHOT</ratel-skywalking.verion>
    </properties>

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

            <dependency>
                <groupId>org.apache.skywalking</groupId>
                <artifactId>apm-toolkit-logback-1.x</artifactId>
                <version>${skywalking.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.skywalking</groupId>
                <artifactId>apm-toolkit-trace</artifactId>
                <version>${skywalking.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.skywalking</groupId>
                <artifactId>apm-toolkit-opentracing</artifactId>
                <version>${skywalking.version}</version>
            </dependency>

            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>${hutool.version}</version>
            </dependency>

            <dependency>
                <groupId>com.github.xiaoymin</groupId>
                <artifactId>knife4j-spring-boot-starter</artifactId>
                <version>${knife4j.version}</version>
            </dependency>

            <dependency>
                <groupId>com.ratel.skywalking</groupId>
                <artifactId>ratel-skywalking-common</artifactId>
                <version>${ratel-skywalking.verion}</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.2 创建公共使用的 common工程

ratel-skywalking-common 是整个工程的公共类的,他的pom内容如下,这里我们首选引入引入父工程依赖 方便依赖管理,为了方便开发 我们引入了 lombok

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--引入父工程依赖 方便依赖管理-->
    <parent>
        <groupId>com.ratel.skywalking</groupId>
        <artifactId>ratel-skywalking-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>ratel-skywalking-common</artifactId>
    <packaging>jar</packaging>

    <dependencies>
        <!--lombok相关-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>none</mainClass>     <!-- 取消查找本项目下的Main方法:为了解决Unable to find main class的问题 -->
                    <classifier>execute</classifier>    <!-- 为了解决依赖模块找不到此模块中的类或属性 -->
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

大家可以注意我这里引入 lombok时并没有 指定的 <version> ,但是查看依赖管理,已经成功引入的了 lombok,版本号是 1.18.20,这也是正我们在 父工程pom中声明的lombok的版本。

在这里插入图片描述

然后在工程里创建 GoodsEntity ,方便在 ratel-skywalking-order 调用 ratel-skywalking-goods 时 GoodsEntity的传递,而不是 分别在2个工程里定义2遍。后续只需要在 2个工程里引入 ratel-skywalking-common 工程即可。

在这里插入图片描述

2.3 创建子工程并引入父工程的依赖以及公共工程

这里我们以 创建 ratel-skywalking-order 工程为例,剩下来的 ratel-skywalking-gateway,ratel-skywalking-goods, ratel-skywalking-notice 都差不多。pom内容如下:

<?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.ratel.skywalking</groupId>
        <artifactId>ratel-skywalking-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>ratel-skywalking-order</artifactId>
    <name>ratel-skywalking-order</name>
    <description>ratel-skywalking-order</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

       <!--springboot相关-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--nacos相关-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

       <!--openfegin相关-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

        <!--lombok相关-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>

        <!--skywalking相关-->
        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-logback-1.x</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-trace</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-opentracing</artifactId>
        </dependency>

        <!--hutool工具包-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
        </dependency>

        <!--knife4j接口文档-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
        </dependency>

       <!--本项目的公共实体类,公共utils等 -->
        <dependency>
            <groupId>com.ratel.skywalking</groupId>
            <artifactId>ratel-skywalking-common</artifactId>
        </dependency>

        <dependency>
            <groupId>com.ratel.skywalking</groupId>
            <artifactId>ratel-skywalking-goods-api</artifactId>
            <version>${skywalking.demo.verion}</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

这里我们首选引入引入父工程依赖 ratel-skywalking-parent 方便依赖管理,然后引入公共工程:ratel-skywalking-common 和其他一些依赖。为了方便展示效果,这里我们只需要处理 按照同样的方法 新建ratel-skywalking-gateway,ratel-skywalking-goods, , ratel-skywalking-notice 本次演示用不到可以不管了。想偷懒的小伙伴也可以直接把我上文的提到的源码下载下来,直接编译启动也行。表情包

2.4 搭建启动环境

由于我们的服务是微服务,故还需要一个nacos,具体环境搭建可以参考 skywalking从入门到精通(一)-环境搭建,
启动脚本路径:\nacos-server-2.0.1\nacos\bin\startup-standalone.cmd
我们本机测试使用nacos的单机模式即可。
在这里插入图片描述
启动以后打开浏览器访问 http://localhost:8848/nacos/#/login 登录即可。默认的账号密码: nacos / nacos
在这里插入图片描述

2.5 启动程序开始验证

我们可以先启动 ratel-skywalking-gateway,然后启动 ratel-skywalking-orderratel-skywalking-goods,启动完成以后
我们在nacos上看到我们的三个服务均已启动成功。
在这里插入图片描述
接下来我们就可以访问接口 :http://localhost:9010/ratel-order/order/getOrder 进行测试了。

三、总结

上面一系列讲解都是比较基础的微服务下的依赖管理方式, 希望大家能有所收获,大家如果有什么疑问可以评论留言告诉我,我看到都会及时解答各位的疑问。
在这里插入图片描述

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

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

相关文章

Python assert实现软件测试

PythonPythonPython 对于测试非常看重&#xff0c;例如测试中最常见的操作——断言 assertassertassert&#xff0c;其在 PythonPythonPython 中就是一个关键字而不是一个函数。而在 CCC 语言中&#xff0c;assertassertassert 只是一个普通的函数。从这点也可以看出&#xff0…

TCP套接字编程

文章目录前言一、TCP套接字1.简单认识TCP协议2.listen函数3.accept函数4.通用TCP服务器二、大小写转换服务1.服务端2.客户端三、多进程版本TCP服务器四、多线程版本TCP服务器前言 这篇文章是紧接着上一篇《UDP套接字编程》文章的&#xff0c;里面详细介绍了套接字编程的一些基…

在Vue项目中使用tinymce富文本编辑器

TinyMC编辑器简介 TinyMCE是一款易用、且功能强大的所见即所得的富文本编辑器。跟其他富文本编辑器相比&#xff0c;有着丰富的插件&#xff0c;支持多种语言&#xff0c;能够满足日常的业务需求并且免费。 TinyMCE的优势&#xff1a; 开源可商用&#xff0c;基于LGPL2.1 插…

虚拟机安装 Ubuntu 桌面版

目录 1、下载系统镜像 2、新建虚拟机 3、配置虚拟机 1、下载系统镜像 Ubuntu桌面版最新版本下载地址&#xff1a;Download | Ubuntu 桌面版 Ubuntu桌面版历史版本下载地址&#xff1a;Download | Ubuntu 桌面版&#xff08;历史版本&#xff09; 以下载18.04 版本为例&am…

【三位重建】NeRF原理+代码讲解

文章目录一、技术原理1.概览2.基于神经辐射场&#xff08;Neural Radiance Field&#xff09;的体素渲染算法3.体素渲染算法4.位置信息编码&#xff08;Positional encoding&#xff09;5.多层级体素采样二、代码讲解1.数据读入2.创建nerf1.计算焦距focal与其他设置2.get_embed…

CSS学习|这一篇就够了|笔记|总结|(超详细讲解)

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;老茶icon &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开兴好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;计…

误删除文件怎么找回 数据恢复用这些方法

误删除文件是很多人都会遇到的问题&#xff0c;尤其是在Windows 10系统中&#xff0c;有时候我们不小心按了ShiftDelete或者清空了回收站&#xff0c;就会导致文件永久消失。那么&#xff0c;误删除文件怎么找回呢?本文将介绍四种数据恢复的方法&#xff0c;帮助你轻松将误删除…

【PCIE体系结构五】PCIE配置和地址空间

&#x1f449;个人主页&#xff1a;highman110 &#x1f449;作者简介&#xff1a;一名硬件工程师&#xff0c;持续学习&#xff0c;不断记录&#xff0c;保持思考&#xff0c;输出干货内容 参考书籍&#xff1a; PCI_Express体系结构导读、 深入浅出SSD&#xff1a;固态存储…

【Java版oj】day30最难的问题、因子个数

目录 一、最难的问题 &#xff08;1&#xff09;原题再现 &#xff08;2&#xff09;问题分析 &#xff08;3&#xff09;完整代码 二、因子个数 &#xff08;1&#xff09;原题再现 &#xff08;2&#xff09;问题分析 &#xff08;3&#xff09;完整代码 三、DFS深度优…

Python实现批量图片下载及去重处理

背景 在爬虫应用开发中&#xff0c;常常需要批量下载图片&#xff0c;并对图片进行去重处理。Python 是一种非常流行的编程语言&#xff0c;也是开发爬虫应用的首选&#xff0c;本文将介绍如何使用 Python 下载图片&#xff0c;并对下载的图片进行去重处理。 内容 首先&…

win10彻底永久关闭自动更新【亲测有效】

一、禁用Windows Update服务 1、同时按下键盘 Win R&#xff0c;打开运行对话框&#xff0c;然后输入命令 services.msc &#xff0c;点击下方的“确定”打开服务&#xff0c;如下图所示。 2、找到 Windows Update 这一项&#xff0c;并双击打开&#xff0c;如图所示。 3、右击…

【行为型模式】责任链模式

文章目录1、简介2、结构3、实现方式3.1、案例引入3.2、结构分析3.3、具体实现4、责任链优缺点5、应用场景1、简介 责任链模式(Chain of Responsibility)是一种行为型设计模式&#xff0c;它允许对象在链上依次处理请求&#xff0c;用户只需要将请求发送到责任链上即可&#xf…

CocosCreator实战篇 | 实现刮刮卡和橡皮擦 | 擦除效果

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/dxt19980308 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由肩匣与橘编写&#xff0c;首发于CSDN&#x1f649; &#x1f4e2;生活依旧是美好而…

【SSM框架】spring的创建与使用

spring的创建与使用Spring项目的创建创建一个maven项目添加Spring依赖添加启动类将bean存储到Spring 中创建bean对象将bean对象存储到Spring容器中从Spring中获取bean创建Spring(上下文)对象从Spring中获取到bean对象使用Bean&#xff08;非必须&#xff09;从spring中获取Bean…

奇瑞版Model 3与Model Y登场:正式进军高端纯电

作者 | Amy 编辑 | 德新4月7日&#xff0c;奇瑞在北京举办「新能源之夜」。整场发布会都在传递一个讯息&#xff1a;奇瑞搞新能源&#xff0c;要大搞特搞&#xff01; 奇瑞在这场发布会上&#xff0c;对新能源的战略、技术、品牌和产品作了全面梳理。其中最引人注目的是&#x…

环信web、uniapp、微信小程序sdk报错详解---注册篇(二、三)

项目场景&#xff1a; 记录对接环信sdk时遇到的一系列问题&#xff0c;总结一下避免大家再次踩坑。这里主要针对于web、uniapp、微信小程序在对接环信sdk时遇到的问题。 注册篇(二) 注册用户报错400 原因分析&#xff1a; 从console控制台输出及network请求返回入手分析 可以看…

【三十天精通Vue 3】第十一天 Vue 3 过渡和动画详解

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: 三十天精通 Vue 3 文章目录引言一、Vue 3 过度和动画概述1.1过度和动画的简介二、Vue 3 过度2…

Java 集合框架面试问题集锦

Java集合框架&#xff08;例如基本的数据结构&#xff09;里包含了最常见的Java常见面试问题。很好地理解集合框架&#xff0c;可以帮助你理解和利用Java的一些高级特性。下面是面试Java核心技术的一些很实用的问题。 Q&#xff1a;最常见的数据结构有哪些&#xff0c;在哪些场…

telnet远程管理linux主机及Zlib、openssl、openssh升级

目录 一、telnet远程管理主机 1、检查是否安装telnet 2、安装telnet服务 3、测试telnet登录 二、zlib、openssl、openssh升级 1、下载zlib包 2、下载openssl包 3、下载openssh包 4、 编译安装zlib 5、编译安装openssl 6、准备升级openssh环境 ①注意必须使用telne…

LLM 快人一步的秘籍 —— Zilliz Cloud,热门功能详解来啦!

最近&#xff0c;我们发布了可处理十亿级向量数据的 Zilliz Cloud GA 版本&#xff0c;为用户提供开箱即用的向量数据库服务&#xff0c;大大降低了数据库的运维成本。 看过上一篇文章《可处理十亿级向量数据&#xff01;Zilliz Cloud GA 版本正式发布》的朋友们知道&#xff0…