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

Java微服务架构设计模式:构建云原生时代的分布式系统

Java微服务架构设计模式:构建云原生时代的分布式系统

Java微服务架构设计模式:构建云原生时代的分布式系统 在云计算与微服务盛行的时代,分布式系统已成为企业级应用的核心架构。Java凭借其强大的生态系统和成熟的并发模型,在分布式系统开发中占据主导地位。本文将深入解析Java微服务架构的设计模式、实战经验与最佳实践。 一、微服务架构基础与演进 1.1 从单体架构到微服务 传统单体架构面临的主要挑战包括: * 技术栈僵化:难以采用新技术 * 可扩展性差:只能整体扩展,无法按需缩放 * 交付周期长:微小修改需要整体部署 * 可靠性低:单点故障导致整个系统崩溃 微服务架构通过将应用拆分为一组小型服务解决了这些问题,每个服务: * 围绕业务能力构建 * 可独立部署和扩展 * 拥有独立的数据存储 * 通过轻量级机制通信 单体应用网关服务用户服务订单服务产品服务用户数据库订单数据库产品数据库 图:从单体架构到微服务架构的演进 1.2 Java微服务生态体系 Java拥有最完善的微服务开发生态: 组件类型主流框架特点开发框架Spring Boot快速开发、自动配置服务治理Spring Cloud Netfl

By Ne0inhk
Java 内部类

Java 内部类

文章目录 * 内部类 * 实例内部类 * 静态内部类 * 匿名内部类 * 局部内部类 内部类 1. 一个事物的内部,还需要一个完整的结构进行描述,而这个结构只为外部服务,这个内部的完整结构叫内部类 2. 可以将一个类定义到另一个类内,或一个方法内,里面的是内部类,外面的是外部类 实例内部类 1. 如何实例化内部类 2. 外部类的成员在内部类中都能直接访问 packagetest2;class outClass{privateint a =3;publicstaticint b =2;class inClass{privateint a =1;// 在运行时确定的// static修饰的调用不需要实例化就能调用,而这个变量在内部类需要实例化内部类才能使用// public static int d = 2;publicstaticfinalint d =3;// 在编译的时候就确定了,是个常量,不依赖于实例化publicint

By Ne0inhk
Java最新面试题(全网最全、最细、附答案)

Java最新面试题(全网最全、最细、附答案)

一、Java基础 1、基础概念与常识Java 语言有哪些特点? 1. 面向对象 * 支持封装、继承和多态三大特性 * 代码以类和对象为组织单位 * 示例: publicclassAnimal{publicvoidsound(){System.out.println("动物发出声音");}}publicclassDogextendsAnimal{@Overridepublicvoidsound(){System.out.println("汪汪汪");}} 2. 平台无关性(Write Once, Run Anywhere) * 通过 Java 虚拟机(JVM)实现跨平台 * 编译后的字节码可在不同操作系统运行 * 依赖 JVM 的版本兼容性保证 3. 强类型语言 所有变量必须先声明类型 编译时进行严格类型检查 示例: java int number

By Ne0inhk
Java 泛型擦除深度解析:原理与限制全揭秘

Java 泛型擦除深度解析:原理与限制全揭秘

Java 泛型的设计有个独特之处:类型信息只存在于编译期,运行时会被彻底擦除。这种 “擦除” 机制让很多开发者困惑:为什么List<String>和List<Integer>在运行时是同一个类型?为什么不能用基本类型作为泛型参数?为什么创建泛型数组会报错?今天我们就从泛型擦除的底层原理讲起,彻底搞懂这些问题,看清泛型的 “真面目”。 一、泛型擦除:Java 泛型的 “编译期幻术”         泛型是 Java 5 引入的特性,但为了兼容之前的版本(Java 5 之前没有泛型),Java 采用了类型擦除(Type Erasure) 的实现方式:编译时检查泛型类型合法性,运行时擦除所有泛型信息。也就是说,泛型只在编译期起作用,运行时 JVM 根本不知道泛型参数的存在。 1. 擦除的核心过程:从泛型到原始类型

By Ne0inhk