springboot
Spring Boot可以作为开发微服务应用程序的基础框架之一。它提供了快速启动、自动配置、依赖管理等功能,简化了构建和部署微服务应用程序的过程。
Spring Boot与Spring Cloud(一个基于Spring Boot的微服务框架)结合使用,可以更方便地实现微服务架构中的服务注册与发现、负载均衡、断路器、配置管理等功能。
Spring Cloud提供了一些组件(如Eureka、Ribbon、Feign、Hystrix等),可以与Spring Boot应用程序集成,帮助构建和管理微服务应用。
综上所述,Spring Boot是一种用于快速构建Java应用程序的开发框架,而微服务是一种架构风格。Spring Boot可以作为开发微服务应用程序的基础框架,与Spring Cloud等微服务框架结合使用,以实现微服务架构中的各种功能。
新建springboot项目
新建springboot
下载idea,以及jdk,新建springboot项目源码
创建maven类型的

安装依赖

查看项目

修改配置
这个项目初始化好了web框架,你可以直接启动。
手工修改一处内容 pom.xml
<groupId>cn.yuchaoit</groupId>
<artifactId>springboot-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-demo</name>
<description>springboot-demo</description>
<properties>
<java.version>1.8</java.version>
</properties>
下载maven
以及修改maven源,下载apache-maven-3.6.3-bin.tar.gz
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>D:\opt\maven-repo</localRepository>
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
</servers>
<mirrors>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
</settings>
让idea使用本地maven

设置全局settings
默认如你修改maven,都是针对单个项目的

添加全局配置,针对以后得新项目,都用自定义的

修改springboot版本
pom.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>2.3.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.yuchaoit</groupId>
<artifactId>springboot-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-demo</name>
<description>springboot-demo</description>
<properties>
<java.version>1.8</java.version>
</properties>
查看已下载的maven依赖

全部删掉,重新下载即可
pom.xml
关于该java项目的配置信息,依赖信息,都会记录在这里。
pom.xml 是 Maven 项目的核心文件之一,用于描述和配置项目的构建过程、依赖关系和其他相关信息。下面是对 pom.xml 的一些解释和理解:
- 项目对象模型(Project Object Model):
pom.xml是 Maven 的项目描述文件,它基于项目对象模型(POM),用于定义项目的结构、依赖和构建行为。POM 是一个 XML 文件,其中包含了项目的各种配置信息。 - 项目配置和元数据:
pom.xml中包含了项目的各种配置信息,如项目的坐标(groupId、artifactId、version)、项目名称、描述、开发者信息等。这些元数据对于 Maven 来管理和构建项目非常重要。 - 依赖管理:
pom.xml用于定义项目的依赖关系。通过在pom.xml文件中添加依赖项,Maven 可以自动下载和管理这些依赖。这使得项目构建和部署过程更加简单和可靠,而不需要手动处理依赖项。 - 插件配置:
pom.xml允许配置插件来扩展构建过程。插件可以执行各种任务,如编译代码、运行测试、打包应用程序等。通过在pom.xml中配置插件,可以定制构建过程以满足项目的特定需求。 - 继承和模块化:
pom.xml支持继承和模块化,使得多个相关的项目可以共享相同的配置和依赖项。通过继承父pom.xml文件,子项目可以继承和重写通用的配置,从而减少冗余的配置。
总之,pom.xml 是 Maven 项目的核心配置文件,它描述了项目的结构、依赖和构建行为,帮助开发者管理和构建项目,提高开发效率和可靠性。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<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>
reload project

"Reload Project" 是 IntelliJ IDEA IDE(集成开发环境)中的一个功能,用于重新加载项目。
当你对项目的配置文件(比如 pom.xml、build.gradle 等)或者项目结构进行了修改后,可以使用 "Reload Project" 来使这些变更生效。它会重新解析和加载项目的配置,更新项目的依赖关系、构建设置和其他相关信息。
使用 "Reload Project" 的步骤如下:
- 在 IntelliJ IDEA 中打开你的项目。
- 在菜单栏中选择 "File"(文件)。
- 在 "File" 菜单中,选择 "Invalidate Caches / Restart"(无效缓存/重启)。
- 弹出一个对话框,你可以选择要执行的操作。点击 "Reload"(重新加载)按钮。
这将重新加载你的项目,使得任何变更在项目中生效。如果需要,IDEA 可能会重新构建项目,更新依赖项并执行其他必要的操作。
请注意,在执行 "Reload Project" 之前,确保你已保存所有的修改,并且备份重要的文件,以防万一。此外,如果你在项目中使用版本控制系统(如 Git),最好在执行 "Reload Project" 之前进行提交或保存修改的变更。
通过执行 "Reload Project",你可以确保 IntelliJ IDEA 中的项目配置与实际的项目文件保持同步,以便正确构建和开发你的应用程序。
maven重新根据当前pom.xml设置的版本信息,下载依赖。
启动项目,访问

开发测试页面
开发controller包、以及测试代码
package cn.yuchaoit.springbootdemo.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello(String name) {
return "Hello, " + name;
}
}

接口访问

因此有了springboot这样的工具箱、框架之后,你就别操心,工具怎么来,而有了大量的工具,干活就完事了。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
加入前端页面

templates/index.html
<!DOCTYPE html>
<html>
<head>
<title>Devops</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<div class="container">
<h3 th:text="${requestname}"></h3>
<a id="rightaway" href="#" th:href="@{/rightaway}" >立即返回</a>
<a id="sleep" href="#" th:href="@{/sleep}">延时返回</a>
</div>
</body>
</html>
前端从后端读取接口返回的数据
后台开发
HelloController.java
package cn.yuchaoit.springbootdemo.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
@RestController
public class HelloController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello(String name) {
return "Hello, " + name;
}
@RequestMapping("/")
public ModelAndView index(ModelAndView mv) {
mv.setViewName("index");
mv.addObject("requestname", "This is index");
return mv;
}
@RequestMapping("/rightaway")
public ModelAndView returnRightAway(ModelAndView mv) {
mv.setViewName("index");
mv.addObject("requestname","This request is RightawayApi");
return mv;
}
@RequestMapping("/sleep")
public ModelAndView returnSleep(ModelAndView mv) throws InterruptedException {
Thread.sleep(2*1000);
mv.setViewName("index");
mv.addObject("requestname","This request is SleepApi"+",it will sleep 2s !");
return mv;
}
}
重启访问新接口

至此就是一个API开发的基础流程。
为什么需要maven
考虑一个常见的场景:以项目A为例,开发过程中,需要依赖B-2.0.jar的包,如果没有maven,那么正常做法是把B-2.0.jar拷贝到项目A中,但是如果B-2.0.jar还依赖C.jar,我们还需要去找到C.jar的包,因此,在开发阶段需要花费在项目依赖方面的精力会很大。
因此,开发人员需要找到一种方式,可以管理java包的依赖关系,并可以方便的引入到项目中。
# 查看pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<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>
可以直接在项目中添加上dependency ,这样来指定项目的依赖包。
思考:如果spring-boot-starter-thymeleaf包依赖别的包,怎么办?
spring-boot-starter-thymeleaf同时也是一个maven项目,也有自己的pom.xml
这样的话,使用maven的项目,只需要在自己的pom.xml中把所需的最直接的依赖包定义上,而不用关心这些被依赖的jar包自身是否还有别的依赖。剩下的都交给maven去搞定。
如何搞定?maven可以根据pom.xml中定义的依赖实现包的查找
去哪查找?maven仓库,存储jar包的地方。
当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库。
maven仓库图解

本地仓库
Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。
运行 Maven 的时候,Maven 所需要的任何包都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的包。
默认情况下,不管Linux还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/respository/ 的仓库目录。
Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <localRepository>D:\opt\maven-repo</localRepository> </settings>
中央仓库
Maven 中央仓库是由 Maven 社区提供的仓库,中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到。
中央仓库的关键概念:
- 这个仓库由 Maven 社区管理。
- 不需要配置,maven中集成了地址 http://repo1.maven.org/maven2
- 需要通过网络才能访问。
https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-thymeleaf
https://developer.aliyun.com/mvn/guide?spm=a2c6h.13651104.mirror-free-trial.5.122d6e1ai7kAvL
私服仓库
通常使用 sonatype Nexus来搭建私服仓库。搭建完成后,需要在 setting.xml中进行配置,比如:
<profile>
<id>localRepository</id>
<repositories>
<repository>
<id>myRepository</id>
<name>myRepository</name>
<url>http://127.0.0.1:8081/nexus/content/repositories/myRepository/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
使用阿里云mvn源
方便起见,我们直接使用国内ali提供的仓库,修改 maven 根目录下的 conf 文件夹中的 setting.xml 文件,在 mirrors 节点上,添加内容如下:
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
mvn怎么确定jar包信息
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
其中groupId、artifactId、version共同保证了包在仓库中的唯一性,这也就是为什么maven项目的pom.xml中都先配置这几项的原因,因为项目最终发布到远程仓库中,供别人调用。
思考:我们项目的dependency中为什么没有写version ?
是因为sprintboot项目的上面有人,来看一下项目parent的写法:
<?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>2.3.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
parent模块中定义过的dependencies,在子项目中引用的话,不需要指定版本,这样可以保证所有的子项目都使用相同版本的依赖包。
maven是什么
Maven 是一个开源的构建工具,它提供了一种标准化和自动化项目构建的方式。以下是一些使用 Maven 的理由:
- 依赖管理:Maven 提供了强大的依赖管理功能。通过在项目的
pom.xml文件中声明依赖,Maven 可以自动下载所需的依赖项,并确保它们的版本和传递依赖的一致性。这简化了项目的构建和部署过程,并减少了手动管理依赖的工作量。 - 构建自动化:Maven 提供了一组标准的构建生命周期和插件,使得构建过程可以自动化和可重复。通过简单的命令,可以执行编译、测试、打包、部署等常见的构建任务。Maven 还支持自定义插件,可以根据项目的需求扩展构建过程。
- 项目结构管理:Maven 鼓励使用一致的项目结构,使得多个项目之间的切换和协作更加容易。它推荐的标准目录结构和约定有助于提高项目的可维护性和可读性,并降低开发人员之间的学习成本。
- 多模块支持:Maven 支持构建和管理多模块项目。通过将项目拆分为多个模块,可以更好地组织和复用代码,并提供了更好的模块化和解耦的能力。Maven 管理模块之间的依赖关系,并确保它们在构建过程中的正确顺序。
- 报告和文档生成:Maven 提供了丰富的报告和文档生成功能。通过运行 Maven 的一些插件,可以生成项目的各种报告(如测试覆盖率报告、代码质量报告等)和文档(如项目站点、API 文档等),帮助开发者更好地了解项目的状态和进展。
- 跨平台和社区支持:Maven 是一个跨平台的构建工具,可以在不同的操作系统上运行。它拥有庞大的社区支持,有很多的插件和扩展可供选择,可以满足各种不同类型的项目需求。
总的来说,Maven 提供了一种标准化、自动化和可重复的项目构建方式,使得开发者能够更专注于业务逻辑而不是构建细节。它简化了项目的依赖管理、构建过程和项目结构,提高了开发效率,并促进了团队之间的协作和代码复用。
target目录
在 Spring Boot 项目中,target 是 Maven 构建过程中生成的目录,用于存放编译后的类文件、资源文件和打包生成的可执行文件(如 JAR 或 WAR 文件)等。
默认情况下,Maven 构建 Spring Boot 项目时会将编译生成的类文件和资源文件输出到 target/classes 目录下,打包生成的可执行文件会输出到 target 目录中。
具体来说,target/classes 目录包含了项目的编译结果,包括编译后的字节码文件、配置文件和其他资源文件。这些文件是用于构建可执行文件(如 JAR)的基础。
另外,如果你运行 mvn package 命令或其他打包相关的命令,Maven 会将项目的编译结果打包成可执行的部署文件(如 JAR 或 WAR)并输出到 target 目录下。生成的可执行文件可以直接运行或部署到服务器上。
总结起来,target 目录是 Maven 构建过程中的一个中间目录,用于存放编译结果和打包生成的可执行文件。它是构建过程的一个临时输出目录,并且通常不会被包含在版本控制中。

mvn clean package
mvn clean package 是 Maven 的命令,用于执行项目的清理和打包操作。
具体解释如下:
clean:这个命令是 Maven 的生命周期阶段之一,用于清理项目的目标输出目录。在执行clean命令后,Maven 会删除之前构建生成的目标文件和目录,以确保开始一个干净的构建过程。package:这是 Maven 的另一个生命周期阶段,用于打包项目。在执行package命令后,Maven 会执行项目的编译、测试和打包等操作,并生成一个可部署的构建产物(如 JAR、WAR 等)。该构建产物通常位于target目录中。
综合起来,mvn clean package 命令会首先清理项目目标输出目录,删除之前生成的构建结果。然后,它会执行项目的编译、测试和打包操作,并生成一个可部署的构建产物。
执行这个命令可以确保你在每次构建项目时都从一个干净的状态开始,并生成最新的构建产物。这在项目开发、构建和部署过程中非常常见。

得到了jar包,可以用于启动应用。
Mvn生命周期
Maven有三套相互独立的生命周期,分别是clean、default和site。每个生命周期包含一些阶段(phase),阶段是有顺序的,后面的阶段依赖于前面的阶段。
- clean生命周期,清理项目
- 清理:mvn clean --删除target目录,也就是将class文件等删除
- default生命周期,项目的构建等核心阶段
- 编译:mvn compile --src/main/java目录java源码编译生成class (target目录下)
- 测试:mvn test --src/test/java 执行目录下的测试用例
- 打包:mvn package --生成压缩文件:java项目#jar包;web项目#war包,也是放在target目录下
- 安装:mvn install --将压缩文件(jar或者war)上传到本地仓库
- 部署|发布:mvn deploy --将压缩文件上传私服
- site生命周期,建立和发布项目站点
- 站点 : mvn site --生成项目站点文档
各个生命周期相互独立,一个生命周期的阶段前后依赖。
生命周期阶段需要绑定到某个插件的目标才能完成真正的工作,比如test阶段正是与maven-surefire-plugin的test目标相绑定了 。
# 直接记住用法
mvn clean package
等于 clean > compile > test > package 四个执行过程
例如
mvn clean
调用clean生命周期的clean阶段
mvn test
调用default生命周期的test阶段,实际执行test以及之前所有阶段
mvn clean install
调用clean生命周期的clean阶段和default的install阶段,实际执行clean,install以及之前所有阶段
查看jar包生成的规则
<?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>2.3.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.yuchaoit</groupId>
<artifactId>sprintboog-demo1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>sprintboog-demo1</name>
<description>sprintboog-demo1</description>
查看jar包
PS C:\Users\Sylar\IdeaProjects\sprintboog-demo1> ls .\target\
目录: C:\Users\Sylar\IdeaProjects\sprintboog-demo1\target
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2023/5/14 20:29 classes
d----- 2023/5/14 20:29 generated-sources
d----- 2023/5/14 20:29 generated-test-sources
d----- 2023/5/14 20:30 maven-archiver
d----- 2023/5/14 20:29 maven-status
d----- 2023/5/14 20:30 surefire-reports
d----- 2023/5/14 20:29 test-classes
-a---- 2023/5/14 20:30 18058948 sprintboog-demo1-0.0.1-SNAPSHOT.jar
-a---- 2023/5/14 20:30 4476 sprintboog-demo1-0.0.1-SNAPSHOT.jar.original
PS C:\Users\Sylar\IdeaProjects\sprintboog-demo1>
最终的jar包名字是根据artifactId-version.jar的规则,看这个就知道了,sprintboog-demo1-0.0.1-SNAPSHOT.jar