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

文章目录

  • 一、前言
  • 二、实战
    • 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.rhkb.cn/news/28304.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT 4.0 —— Code Interpreter

&#x1f4ce;产品销售数据集.csv 选取以上的数据集作为输入&#xff0c;对Code Interpreter 进行测试 1.输入指定数据集&#xff0c;要求给出该数据集的概貌 2.请分析销售的总金额和其他变量的关系 Python Script: # Import required libraries import matplotlib.pyplot a…

500行JavaScript代码在前端根据数据生成CAD工程剖面图

前言 ​ 用数据生成CAD图&#xff0c;一般采用的ObjectArx对CAD二次开发完成。ObjectARX是AutoDesk公司针对AutoCAD平台上的二次开发而推出的一个开发软件包&#xff0c;它提供了以C为基础的面向对象的开发环境及应用程序接口&#xff0c;能访问和创建AutoCAD图形数据库。而由…

SolidWorks+thonny esp32 电磁控制,程序算法搞起来了,我的结构-仿真-电磁-控制-算法的学习之路

来个自我介绍&#xff0c;本科是微电子制造专业&#xff0c;隶属于机电工程学院&#xff0c;所以机械&#xff0c;电子&#xff0c;控制&#xff0c;流体&#xff0c;材料&#xff0c;结构这些基础都有&#xff0c;而且水平不低。工作了13年&#xff0c;主要干机械&#xff0c;…

有趣的技术探索分享小合集

Chatgpt 现世仅两个月&#xff0c;已经达到了 1 亿月活跃用户&#xff0c;不但影响了世界范围内的知识工作者&#xff0c;还在各行各业掀起了科技创新的热潮。在信息大爆炸、新科技不断涌出的现阶段&#xff0c;拥有面向未来的科技趋势的重要的洞察力&#xff0c;并由此改变所处…

chatgpt赋能python:Python画圆柱体教程:从入门到实践

Python画圆柱体教程&#xff1a;从入门到实践 如果你正在寻找一种简单有效的Python绘图方法&#xff0c;那么画圆柱体是一个不错的选择。本文将介绍如何使用Python绘制圆柱体的过程&#xff0c;包括使用的库、代码示例以及最终结果。 介绍 圆柱体是一种很常见的几何形状&…

Altium Designer导入AutoCAD图纸

简介&#xff1a;本文主要介绍的是将Altium Designer导入AutoCAD图纸的操作方法。 一直采用Altium Designer绘制PCB边框&#xff0c;可是如果PCB的尺寸边框十分复杂&#xff0c;或者遇到Altium Designer无法设计的图形&#xff0c;比如椭圆的时候&#xff0c;我们不得不借助第三…

谷歌一雪前耻,全新PaLM 2反超GPT-4,办公全家桶炸裂升级,Bard史诗进化

【新智元导读】新版PaLM 2超强进化&#xff0c;办公全家桶Workspace全面升级&#xff0c;Bard全面增强、所有人可用……可以看出&#xff0c;这届I/O大会&#xff0c;谷歌是真的憋出不少大招。 谷歌I/O 2023大会&#xff0c;仿佛又给谷歌的支持者们打了一针强心剂。 此前&…

阿里巴巴取消 CTO 一职;近半数微软员工担心被 AI 抢饭碗;Flutter 3.10 发布|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…

Apple I 设计完成 | 历史上的今天

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 4 月 11 日&#xff0c;在 1953 年的今天&#xff0c;安德鲁怀尔斯诞生。大约在 1637 年左右&#xff0c;法国学者费马提出了一个数学代数相关的定理&#xff0…

不跟风 ChatGPT,Google AI 2022 年都在忙什么?

作者 | Marian Croak 翻译&整理 | Carol 出品 | AI科技大本营 谷歌发布了2022年在AI领域取得的巨大突破&#xff0c;主要包括大语言模型 (LLM) 和文本生图两个领域。 相较多年前提出的“不作恶”口号&#xff0c;谷歌将今后发展人工智能的理念进一步提升至“负责任”…

Python基础语法 常见面试问题 技巧汇总

Python基础语法 & 常见面试问题 & 技巧汇总 文章目录 Python基础语法 & 常见面试问题 & 技巧汇总一、注释二、变量与常量三、输出1、格式化输出1&#xff09;"~{}".format(a)2&#xff09;%s,%.1f 2、转义字符 四、运算符1、幂运算 五、基本数据类型…

LeetCode刷题——贪心法(C/C++)

这里写目录标题 [中等]买卖股票的最佳时机 II[中等]移掉k位数字[中等]跳跃游戏[中等]跳跃游戏 II[中等]加油站[中等]划分字母区间[中等]去除重复字母[中等]无重叠区间[中等]用最少数量的箭引爆气球 [中等]买卖股票的最佳时机 II 原题链接题解 最简单的思路&#xff0c;效率不高…

云炬VB开发笔记 2可视化编程基础

源码下载&#xff08;提取码:6666&#xff09; 目录 1模拟小车行驶—— 控件基本属性和窗体​ 2-2简易文本编辑器—— 标签、 命令按钮、文本框​​​ 2-3模拟热气球 升空—— 图片和图像框​ 1模拟小车行驶—— 控件基本属性和窗体 2-2简易文本编辑器—— 标签、 命令按钮…

如何为现有IntelliJ IDEA项目创建GitHub存储库和本地Git存储库

IntelliJ IDEA是Java语言开发的集成环境&#xff0c;IntelliJ在业界被公认为优秀的Java开发工具之一&#xff0c;尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、 创新的GUI设计等方面的功能可以说是超常的。 点击下载IntelliJ IDEA最新试…

代码创造的欢乐世界-通用人工智能让儿童熟练应用编程

想要复杂的参考这一篇&#xff0c;使用云平台即可完成&#xff1a; 美美的圣诞树画出来-CoCube- 把圣诞树换成六一儿童节主题的就可以啦。 这一篇是使用chatgpt类应用&#xff0c;给出关键提示词&#xff0c;代码自动生成哦。 神十六发射成功&#xff0c;科技工作者博士学位…

统计检验分析 (本文在chatGPT辅助下完成)

1. 正态分布检验 2. 统计检验 t-test: 适用于样本数量较小&#xff08;通常小于 30&#xff09;的正态分布数据&#xff0c;用于比较两个样本的均值是否有显著差异。 Paired t-test: 确定某个总体的成对测量值之间的差异是否为 0 Two-sample t-test (independent t-test): 确…

sql 性能优化基于explain调优

文章目录 Explain分析&#xff1f;问题描述解决方案 Explain分析&#xff1f; 关于Explain具体可以干什么&#xff0c;有哪些优缺点&#xff0c;本博主的文章有写到&#xff0c;这是链接地址: 点击这里查看. 下面来说下Explain在项目实战中&#xff0c;如何去进行优化。 问题…

chatgpt在Unity里的开发和原理

chatgpt在Unity里的开发和原理 教学视频 先放上教学视频链接 https://www.reddit.com/r/unity_tutorials/comments/10aic34/chatgpt_with_unity_in_todays_video_i_show_you_a/ https://www.youtube.com/watch?vPRwfHajinSU 语音控制实现unity里的效果 或者语音控制实现Un…

搞不定高考的ChatGPT,原来只有小学4年级水平

夕小瑶科技说 原创 作者 | Python 之前&#xff0c;复旦大学的研究者让ChatGPT参加了中国高考&#xff0c;发现成绩惨不忍睹&#xff08;参见推送&#xff09;&#xff0c;其中理科数学竟只有20多分。这次&#xff0c;小米AI lab的研究者们给模型降低一下难度&#xff0c;找了…

《聊聊我的故事 | 谈谈自己大学的收获,以及毕业的求职经历》

1.初进校园&#xff0c;实现最初的梦想 还在读高中的时候&#xff0c;心中就非常向往大学的生活&#xff0c;希望自己可以快一点进入大学。记得老师经常对我们说&#xff0c;你们现在辛苦一点&#xff0c;等到进入大学后就会轻松很多了。因此&#xff0c;心中便一直都有一个目…