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进行打包

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.可以通过注解和配置的方式进行开发

相关推荐
devlei1 天前
从源码泄露看AI Agent未来:深度对比Claude Code原生实现与OpenClaw开源方案
android·前端·后端
pshdhx_albert1 天前
AI agent实现打字机效果
java·http·ai编程
沉鱼.441 天前
第十二届题目
java·前端·算法
努力的小郑1 天前
Canal 不难,难的是用好:从接入到治理
后端·mysql·性能优化
赫瑞1 天前
数据结构中的排列组合 —— Java实现
java·开发语言·数据结构
Victor3561 天前
MongoDB(87)如何使用GridFS?
后端
Victor3561 天前
MongoDB(88)如何进行数据迁移?
后端
小红的布丁1 天前
单线程 Redis 的高性能之道
redis·后端
GetcharZp1 天前
Go 语言只能写后端?这款 2D 游戏引擎刷新你的认知!
后端
周末也要写八哥1 天前
多进程和多线程的特点和区别
java·开发语言·jvm