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进行打包
bash
mvn package
此时这里是普通Java库,所以这里会打包成jar包

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

如果此时使用Maven中的clean命令
bash
//删除之前创建的文件主要是target目录
mvn clean

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

管理依赖
Maven是一个项目管理工具,里面的pom.xml文件部署获取对应jar包,而不是手动创建jar包
依赖:当前项目运行所需要的jar包
像以前所学的JDBC时,需要手动下载mysql - connector-java包,并将其放到项目中,通过才可以通过一些语句对MySQL数据库进行增删查改操作
有了Maven直接在pom.xml中的 dependencies标签中添加对应的依赖坐标
xml
<dependencies>
</dependencies>
xml
<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并且可能导入版本不一样因此出现冲突,此时可能不一定需要进行排包,需要具体情况具体分析
依赖排除
主动断开依赖的资源
xml
<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仓库
xml
<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标签下
xml
<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
<?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>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工程,都有一个父工程,依赖的版本号,由父工程统一管理,因此这里是通过父工程自动引入所指定的版本号

启动项目
java
package com.example.demo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloControllor {
@RequestMapping("/hello")
public String hello(){
return "hello String Boot";
}
}
java
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
//启动
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}

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


可能出现的错误

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

2.注解错误
java
//注解错误
@Controller
public class HelloControllor {
@RequestMapping("/hello")
public String hello(){
return "hello String Boot";
}
}

505错误
一般是因为服务器内部错误,程序遇到特殊情况导致服务器崩溃
java
@RestController
public class HelloControllor {
@RequestMapping("/hello")
public String hello(){
int ret = 10/0;
return "hello String Boot";
}
}
此时这里10/0除数不可以为0,运行程序并不会出错,但是当访问后就会出现错误日志


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

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