Spring Boot快速入手

Spring Boot快速入手

SpringBoot快速入手

完成StpringBoot环境搭建,并使用起创建一个项目,输出HelloWorld

Maven

Maven基本概念

什么是Maven 呢?

官方地址https://maven.apache.org/index.html
Apache Maven is a software project management and comprehension tool. Based on theconcept of a object model (POM), Maven can manage a project’s build, reporting and documentation from a central piece of information
Maven是一个软件项目的管理工具,基于POM(Project Object Model,项目对象模型) ,可以通过一小段信息描述去管理项目的构建、报告和文档的项目管理工具
简单来说就是可以通过pom.xml文件配置就可以获取对应外部jar包

为什么要学习Maven呢

其简单、方便提高开发效率,减少开发Bug,并且Maven中功能丰富,这里主要介绍的是项目构建和项目依赖

Maven创建

项目构建

idea中集成了Maven,所以无需安装即可使用
idea创建Maven项目

在这里插入图片描述


此时左侧就会自动生成一个pom.xml文件

在这里插入图片描述


此时右侧也有一个Maven

在这里插入图片描述


如果右边么有显示的话,右键点击我们这个项目,此时有个Add Framework Support,此时如果里面有Maven勾选上就行,此时就会显示了,如果没有Maven说明右侧显示了

在这里插入图片描述


在这里插入图片描述

Maven中提供了标准的、跨平台(Windows、Linux、MacOS等)的自动化项目构建方式
当我们开发一个项目之后,代码需要编译、测试、打包、发布等流程,每次代码有修改的地方,都要重复操作,这个流程如果重复执行还是很麻烦的,因此Maven提供了一些简单命令来完成项目构建
会有一下功能,此时如果点击了一个功能,其会将其所在位置上面功能都执行一遍

在这里插入图片描述


例如此时点击package打包,将其打包成jar包(普通java库) 或者 War包(Web应用),此处可以点击右侧Maven中package进行打包,也可以通过命令行通过命令行mvm package进行打包

mvn package 

此时这里是普通Java库,所以这里会打包成jar包

在这里插入图片描述


此时这里就会自动生成一个target文件,里面有刚才的jar包

在这里插入图片描述


如果此时使用Maven中的clean命令

//删除之前创建的文件主要是target目录 mvn clean 
在这里插入图片描述


此时将刚才package创建的target目录中所有东西都删除了

在这里插入图片描述

管理依赖

Maven是一个项目管理工具,里面的pom.xml文件部署获取对应jar包,而不是手动创建jar包
依赖:当前项目运行所需要的jar包
像以前所学的JDBC时,需要手动下载mysql - connector-java包,并将其放到项目中,通过才可以通过一些语句对MySQL数据库进行增删查改操作

有了Maven直接在pom.xml中的 dependencies标签中添加对应的依赖坐标

<dependencies></dependencies>
<dependencies><dependency><groupId>mysql</groupId><!--组织id--><artifactId>mysql-connector-java</artifactId><!--jar包名称--><version>8.0.30</version><!--版本--></dependency></dependencies>

这里groupId 是组织id
artifactId是jar包名称
version是包的版本

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

保存以后,其就会将此时mysql对应的jar包放进来

在这里插入图片描述


但是发现一个问题,我们刚才只导入了mysql-connector-java包,但是此时它为什么把protobuf-java这个包也加入进来了呢?这个是传递依赖问题

传递依赖

比如:A 依赖B, B依赖C,此时A项目引入B时候,也需要将C引入进来
像如果我们要吃火锅,需要准备锅,食材,调料等等都要进行准备好,如果少一个就可能无法吃
但是此时的Mave就像我们点了一个外卖,商家直接把所有食材,调料甚至把锅也带来了,把可能需要的都带来了

在这里插入图片描述


此时这里Jar A和项目B都是项目A直接依赖
Jar B、Jar C……都是间接依赖

当然依赖虽然把所有需要的都打包进来,虽然很好,但是此时可能会出现这个项目依赖 Jar C ,这个也依赖Jar C,此时导入两次Jar C并且可能导入版本不一样因此出现冲突,此时可能不一定需要进行排包,需要具体情况具体分析

依赖排除

主动断开依赖的资源

<dependencies><dependency><groupId>mysql</groupId><!--组织id--><artifactId>mysql-connector-java</artifactId><!--jar包名称--><version>8.0.30</version><!--版本--><!-- 排除依赖--><exclusions><exclusion><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactId></exclusion></exclusions></dependency></dependencies>

此时就会把mysql所依赖的jar包进行了删除

在这里插入图片描述


依赖调解:
A -> B -> C -> X(1.0)
A -> D -> X(2.0)
此时Maven会选择最短路径优先原则选择依赖,此时就会选择X(2.0)当然我们也可以进行手动指定版本

Maven Helper插件安装

File -> setting -> Plugins -> '搜索Maven Helper’插件

在这里插入图片描述
在这里插入图片描述


安装完以后,installed中将Maven Helper勾选上 Ok Apply需要重启idea
此时打开pom.xml文件中下面就会有两个东西

在这里插入图片描述


点击Dependency Analyzer 里面放了对应Jar包

在这里插入图片描述


此时点击Exclude就可以进行排除依赖
其会自动更新pom.xml文件内容

在这里插入图片描述

Maven仓库

<dependencies><dependency><groupId>mysql</groupId><!--组织id--><artifactId>mysql-connector-java</artifactId><!--jar包名称--><version>8.0.30</version><!--版本--></dependency></dependencies>

为什么这里短短几行就可以将其对应Jar包导入进来呢
这个代码被称为坐标,是唯一的
Maven中,根据groupId 、artifactId、version进行配置,唯一标识一个jar包,缺一不可,此时在pom.xml文件中写下这些东西,点击刷新,Maven会根据坐标的配置,去仓库中找对应Jar包下载进来

仓库:用于存储资源,管理各种Jar包
Maven仓库其实本质上是一个文件夹(目录),这个目录下存储着开发中所有依赖的Jar包,插件等
仓库地址:https://repo1.maven.org/maven2/

在这里插入图片描述


Maven仓库分为两大类:本地仓库和远程仓库,其中远程仓库又分为中央仓库、私服和其他公开库等等

本地仓库

本地仓库:自己计算机上一个目录(专门存放Jar包的文件夹)
因此找对应Jar包会先从本地仓库进行找,找到了就直接引用,没找到就从远程仓库中找

在这里插入图片描述


File -> setting -> Build Tools -> Maven

在这里插入图片描述


Locla repository这个最开始是空的,但是随着Maven的使用,该仓库下会越来越多Jar包
这里默认是在C盘中,因为未来可能会下载更多的文件,因此将其放入其他盘中,此时需要将这里.m2文件拷贝出来,放到其他盘文件中,最后将这个保存位置放到其他盘即可

在这里插入图片描述

中央仓库

中央仓库:Maven软件中内置的一个远程仓库地址,服务于整个互联网,全球唯一
仓库地址:https://repo1.maven.org/maven2/
当然也可以从https://mvnrepository.com/里面下载
这个下面就是如何使用

在这里插入图片描述

私有服务器

私服:一般是由公司团队自己搭建的私有仓库
私服是属于某个公司的,需要一定的权限才可以访问

在这里插入图片描述


1.先从本地仓库中获取,如果存放直接返回
2.如果本地仓库没有,从私有仓库中找
3.私有仓库也没有,才会从中央仓库中,不存在就会报错
4.并且如果中央仓库存在,也会先将其缓冲到私服之后,在缓存到本地仓库,再从Maven下载中提供服务

Maven配置国内源

因为中央仓库在国外,所以下载会比较慢,因此优先使用国内的一些镜像网站会快一点
File -> setting
上面已经将这里下载到本地仓库设置到了D盘中
这里将此时的setting文件也进行修改

在这里插入图片描述
在这里插入图片描述


其默认是国外的https://mvnrepository.com/
我们可以将其换成阿里云的仓库
Maven镜像地址大全

在这里插入图片描述


将这个放到对应maven中setting.xml文件中 mirrors标签下

<mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url></mirror>
设置新项目Maven

但是上面设置Maven存放位置,和从哪里下载都是对这个项目进行的修改,如果新创建一个Maven项目中又会恢复到默认,因此这里需要设置
File -> New Projects Setup -> Setting for New Projects ->

在这里插入图片描述


此时这里和上面一样的设置Maven下载源和存储到哪里

在这里插入图片描述

SpringBoot程序

Spring官方:https://spring.io/

在这里插入图片描述


Spring让Java程序更加快速,简单和安全.Spring对于速度、简单性和⽣产⼒的关注使其成为世界上最流⾏的Java框架,现在的Spring已经形成了自己的生态圈,开发中也倾向于使用Spring官方提供的技术

在这里插入图片描述


Spring中有好多项目,都是基于Spring Framework开发的,因为其配置多,入门难,所以Spring为了简化开发,创造出来Spring Boot(Spring 脚手架)
脚手架

在这里插入图片描述


使用这个脚手架就可以快速盖房子

Spring Boot项目创建

要先安装Spring Boot Helper插件,社区版需要这个插件,专业版不需要安装
安装好的这个zip
File -> sttings ->Plugins -> Install Plugin from Disk…… 选择下载的这个插件的zip文件即可

在这里插入图片描述


此时新建项目里面就有这个Spring Boot选项

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


此时创建就会加载一些包,并且第一次打开Spring Boot项目需要加载很久,因为这些东西没有加载到本地仓库,此时这里采用国内源这样下载就会快一点

在这里插入图片描述


在这里插入图片描述


src/main/java: Java 源代码
src/main/resources:静态资源或配置⽂件
/static静态资源文件,像html、css、JS等静态文件不需要服务器数据进⾏绑定的⻚⾯
/templates:需要服务器动态渲染的数据文件
src/test/java:测试源代码
target:编译后的文件路径
pom.xml:配置文件

pom.xml文件如下

<?xml version="1.0" encoding="UTF-8"?><projectxmlns="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>3.5.7</version><relativePath/><!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><description>Demo project for Spring Boot</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version></properties><dependencies><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></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>3.5.7</version></plugin></plugins></build></project>

主要关注 dependencies这个标签下的东西
引入了两个依赖
spring-boot-starter-web:web开发所需要的常见依赖
spring-boot-starter-test:单元测试所需要的常见依赖

在这里插入图片描述


发现这两个依赖并没有确定版本号,那他的版本号是从哪里来的呢
因为每创建一个SpringBoot工程,都有一个父工程,依赖的版本号,由父工程统一管理,因此这里是通过父工程自动引入所指定的版本号

在这里插入图片描述

启动项目

packagecom.example.demo;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;@RestControllerpublicclassHelloControllor{@RequestMapping("/hello")publicStringhello(){return"hello String Boot";}}
packagecom.example.demo;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublicclassDemoApplication{//启动publicstaticvoidmain(String[] args){SpringApplication.run(DemoApplication.class, args);}}
在这里插入图片描述


输入网址:http://127.0.0.1:8080/hello访问,访问本机的8080端口号

在这里插入图片描述


在这里插入图片描述

可能出现的错误

在这里插入图片描述


出现404大概是这里url路径不正确导致的

在这里插入图片描述
2.注解错误
//注解错误@ControllerpublicclassHelloControllor{@RequestMapping("/hello")publicStringhello(){return"hello String Boot";}}
在这里插入图片描述


505错误
一般是因为服务器内部错误,程序遇到特殊情况导致服务器崩溃

@RestControllerpublicclassHelloControllor{@RequestMapping("/hello")publicStringhello(){int ret =10/0;return"hello String Boot";}}

此时这里10/0除数不可以为0,运行程序并不会出错,但是当访问后就会出现错误日志

在这里插入图片描述
在这里插入图片描述


服务器启动失败会出现这种问题,需要看tomact日志看是否有错误

在这里插入图片描述


Spring Boot就是为了快速开发Spring诞生

1.提供了添加依赖功能,快速集成框架
2.内置web程序,直接运行和部署程序
3.可以通过注解和配置的方式进行开发

Read more

Flutter 组件 actions_toolkit_dart 适配鸿蒙 HarmonyOS 实战:自动化套件方案,构建 GitHub Actions 深度集成与跨端流水线治理架构

Flutter 组件 actions_toolkit_dart 适配鸿蒙 HarmonyOS 实战:自动化套件方案,构建 GitHub Actions 深度集成与跨端流水线治理架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 actions_toolkit_dart 适配鸿蒙 HarmonyOS 实战:自动化套件方案,构建 GitHub Actions 深度集成与跨端流水线治理架构 前言 在鸿蒙(OpenHarmony)生态迈向全球化开源协作、涉及极大规模的跨端 CI/CD 流水线构建、多机型自动化兼容性测试及严苛的代码准入控制背景下,如何实现一套既能深度对接 GitHub Actions 核心底脚(Toolkits)、又能提供原生 Dart 编程感且具备工业级日志输出与状态管理的“自动化控制基座”,已成为决定应用研发迭代频率与交付质量稳定性的关键。在鸿蒙项目这类强调多模块(HAP/HSP)并行构建与分布式证书签名校验的环境下,如果 CI 脚本依然依赖大量零散的 Shell 拼接,由于由于环境变量的微差异,极易由于由于“脚本不可维护”导致鸿蒙应用在自动化发布环节频繁由于由于故障导致阻塞。

By Ne0inhk
Flutter 三方库 github_actions_toolkit 的鸿蒙化适配指南 - 实现 GitHub Actions 高效自动化任务构建、支持日志颜色修饰与核心工具集成

Flutter 三方库 github_actions_toolkit 的鸿蒙化适配指南 - 实现 GitHub Actions 高效自动化任务构建、支持日志颜色修饰与核心工具集成

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 github_actions_toolkit 的鸿蒙化适配指南 - 实现 GitHub Actions 高效自动化任务构建、支持日志颜色修饰与核心工具集成 前言 在进行 Flutter for OpenHarmony 的工程化 CI/CD(持续集成与交付)构建时,利用 GitHub Actions 进行自动化测试和流水线发布是主流选择。github_actions_toolkit 是一个专为编写非 Web 类 Action 脚本设计的工具集,它能让你在 Dart 脚本中轻松调用 Actions 的核心功能(如日志分级输出、设置导出变量等)。本文将探讨如何利用该库提升鸿蒙项目的自动化构建效率。 一、原理解析 / 概念介绍

By Ne0inhk
TCP 服务器如何支持高并发?单进程、多进程、多线程模型详解

TCP 服务器如何支持高并发?单进程、多进程、多线程模型详解

在上一篇博客中,我们基于 UDP 实现了一个简单的群聊模型。 今天,我们正式进入 TCP 网络编程,实现一个最经典的功能 —— 🧾 服务器回显(Echo Server) 就是我们发送的消息,服务器不做处理,直接给我们返回即可。 一、TCP 服务器整体流程 一个最基础的 TCP 服务器,需要经历以下步骤: socket() bind() listen() accept() read()/write() close() 流程图可以理解为: 创建套接字 → 绑定端口 → 开始监听 → 等待客户端连接 → 收发数据 → 关闭连接 我们都知道TCP是连接的,可靠的传输层协议,所以每一个客户端在访问服务器的时候都会建立连接(也就是我们课本上说的三次握手),在客户端没有申请建立连接的时候,服务器要始终保持这监听状态(调用系统调用接口listen)(因为用户可是一天24小时内任意时间都有可能对服务器进行访问,所以服务器必须始终保持这监听状态,这就好比我们半夜不睡觉,就是刷抖音短视频,我们可从来没有打不开抖音的时候,这就是因为服务器保持着监听状态,即使你半夜进行访问,

By Ne0inhk
Flutter 三方库 gviz 的鸿蒙化适配指南 - 实现复杂的 Graphviz 拓扑图布局计算、支持 DOT 语言解析与自动化图谱生成

Flutter 三方库 gviz 的鸿蒙化适配指南 - 实现复杂的 Graphviz 拓扑图布局计算、支持 DOT 语言解析与自动化图谱生成

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 gviz 的鸿蒙化适配指南 - 实现复杂的 Graphviz 拓扑图布局计算、支持 DOT 语言解析与自动化图谱生成 前言 在进行 Flutter for OpenHarmony 的企业级应用开发中,特别是在处理网络拓扑、数据库 ER 图或编译器架构分析时,自动绘制复杂的图形结构是一项巨大挑战。gviz 是一个基于 Graphviz 设计思路的 Dart 库,它能将 DOT 描述语言转化为结构化的图谱对象模型。本文将指导大家如何在鸿蒙端利用该库高效构建动态拓扑。 一、原理解析 / 概念介绍 1.1 基础原理 gviz 充当了 DOT 源码与渲染引擎之间的桥梁。它解析外部输入的 DOT 文本,

By Ne0inhk