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

相关推荐
-Excalibur-2 小时前
关于计算机网络当中的各种计时器
java·c语言·网络·c++·笔记·python·计算机网络
小宇的天下2 小时前
Calibre nmDRC 运行机制与规则文件(13-1)
java·开发语言·数据库
我爱娃哈哈2 小时前
SpringBoot + RabbitMQ + Redis + MySQL:社交平台私信发送、已读状态同步与历史消息缓存实战
spring boot·缓存·java-rabbitmq
阿拉斯攀登2 小时前
设计模式:实战概要
java·设计模式
阿拉斯攀登2 小时前
设计模式:工厂模式概要
java·设计模式·抽象工厂模式
曹轲恒2 小时前
Java Collections & Arrays 工具类
java
.卡2 小时前
(022)FastJson 序列化导致的 java.util.ConcurrentModificationException
java
武子康2 小时前
Java-218 RocketMQ Java API 实战:同步/异步 Producer 与 Pull/Push Consumer
java·大数据·分布式·消息队列·rocketmq·java-rocketmq·mq
不爱吃米饭_2 小时前
Spring Security、Apache Shiro、Sa-Token,主流安全框架如何选择?
java·安全