入门
简述
背景
众所周知 Spring 应用需要进行大量的配置,各种 XML 配置和注解配置让人眼花缭乱,且极容易出错,因此 Spring 一度被称为“配置地狱”。
为了简化 Spring 应用的搭建和开发过程,Pivotal 团队在 Spring 基础上提供了一套全新的开源的框架,它就是 Spring Boot。
Spring Boot 具有 Spring 一切优秀特性,Spring 能做的事,Spring Boot 都可以做,而且使用更加简单,功能更加丰富,性能更加稳定而健壮。随着近些年来微服务技术的流行,Spring Boot 也成为了时下炙手可热的技术。
Spring Boot 提供了大量开箱即用(out-of-the-box)的依赖模块,例如 spring-boot-starter-redis、spring-boot-starter-data-mongodb 和 spring-boot-starter-data-elasticsearch 等。这些依赖模块为 Spring Boot 应用提供了大量的自动配置,使得 Spring Boot 应用只需要非常少量的配置甚至零配置,便可以运行起来,让开发人员从 Spring 的“配置地狱”中解放出来,有更多的精力专注于业务逻辑的开发。
J2EE笨重的开发、繁多的配置、低下的开发效率、 复杂的部署流程、第三方技术集成难度大
官网
Spring Boot来简化Spring应用开发,约定大于配置, 去繁从简,just run就能创建一个独立的,产品级别的应用
优点
1、独立运行的 Spring 项目
Spring Boot 可以以 jar 包的形式独立运行,Spring Boot 项目只需通过命令“ java–jar xx.jar” 即可运行。
2、主流框架集成
Spring Boot 快速集合Mybatis、Mybatis Plus、Redis。
3、内嵌 Servlet 容器
Spring Boot 使用嵌入式的 Servlet 容器(例如 Tomcat、Jetty 或者 Undertow 等),应用无需打成 WAR 包 。
4、提供 starter 简化 Maven 配置
Spring Boot 提供了一系列的“starter”项目对象模型(POMS)来简化 Maven 配置。
5、提供了大量的自动配置
Spring Boot 提供了大量的默认自动配置,来简化项目的开发,开发人员也通过配置文件修改默认配置。
6、自带应用监控
Spring Boot 可以对正在运行的项目提供监控。
7、无 xml 配置
Spring Boot 不需要任何 xml 配置即可实现 Spring 的所有配置。
环境准备
在使用 Spring Boot 进行开发之前,要准备好两件事件
第一件事情就是你必须掌握以下知识
1、Spring框架的使用经验
2、熟练使用Maven进行项目构建和依赖管理
3、熟练使用Eclipse或者IDEA,推荐使用IDEA
第二件事就是配置好开发环境
环境配置要求如下
名称 | 说明 |
---|---|
Spring Boot | 3.3.5及以上版本 |
JDK | 17.0.13 及以上版本 |
Maven | 3.9.9 及以上版本 |
IntelliJ IDEA | 2024.2.4及以上版本 |
Maven 设置
给Maven 的settings.xml配置文件 ,Maven 详细内容可参考这篇Maven入门到精通。
<localRepository>D:/repo</localRepository>
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>jdk-17</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>17</jdk>
</activation>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
IDEA设置
设置Maven
Spring Boot 入门程序
环境准备完成后,接下来,我们就可以通过 Intellij IDEA 创建一个 Spring Boot 项目了
Intellij IDEA 一般可以通过两种方式创建 Spring Boot 项目
- 使用 Maven 创建
- 使用 Spring Initializr 创建
功能描述:浏览器发送hello请求,服务器接受请求并处理,响应Hello World字符串;
创建一个maven工程(jar方式)
1、pom.xml
Spring Boot 3.x 要求jdk17的支持
<!-- springboot父工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<!-- springboot-web启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- springboot-test启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2、main方法
/**
* @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
*/
@SpringBootApplication
public class HelloWorldApplication {
public static void main(String[] args) {
// Spring应用启动起来
SpringApplication.run(HelloWorldApplication.class,args);
}
}
3、controller
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "Hello World!";
}
}
注:默认扫描的包是main方法所在的包及子包
4、启动 Spring Boot
默认情况下,Spring Boot 项目会创建一个名为 ***Application 的主程序启动类 ,该类中使用了一个组合注解 @SpringBootApplication,用来开启 Spring Boot 的自动配置,另外该启动类中包含一个 main() 方法,用来启动该项目。
直接运行启动类 HelloworldApplication 中的 main() 方法,便可以启动该项目,结果如下图。
注意:Spring Boot 内部集成了 Tomcat,不需要人为手动配置 Tomcat,开发者只需要关注具体的业务逻辑即可。
5、打成可运行jar包
只要打成jar包方式即可,但默认打成的jar包,不包含内嵌的tomcat,无法运行
需要加入打包插件,使用其加入内嵌的tomcat
关于打包插件的详细内容,可以查看这篇SpringBoot之Maven打包插件。
- pom.xml
<!-- 这个插件,可以将应用打包成一个可执行的jar包;-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
在Linux中执行jar包有两种方式
前端执行(控制台不能关闭)
# 前端启动
java -jar xxx.jar
后端执行(控制台可以关闭)
## nohup 不挂断运行,退出终端也运行
## 2>&1: 将错误输出(标准错误输出)转换为标准输出。2 表示标准错误输出。 &1 表示标准输出
## &: 让命令在后台执行,可以让终端继续输入其他命令
nohup java -jar xxx.jar 2>&1 &
# 查看进程
ps -ef | grep xxx.jar
# 杀死进程
kill -9 pid
使用Spring Initializer方式
可以使用 Spring Initializer快速创建项目
在线创建地址: https://start.spring.io
IDEA中也进行了 Spring Initializer 集成,方式如下
创建步骤
在IDEA选择 File -> New - > Project -> Spring Initializr -> 点击Next 。
如果start.spring.io打不开,选用https://start.aliyun.com 地址
也可以使用自己创建的私服地址,具体查看一下创建私服的文章。
填写组织信息: 组名、工程名称、版本名称 和 包名称 ,点击Next。
- 选取Spring Web依赖,点击Create。
目录结构
resources目录
- static目录 :静态资料(jscssimgfont)
- templates目录 : 模板文件 (thymeleaffreemarkervelocity)
- application.properties 文件 : 应用程序配置(port)
mvnw
- 是maven wrapper,maven中的插件具有滞后性,即有的插件只针对某个版本有效,这里在用的时候,可能会安装多个版本的maven,为了解决这个问题,maven wrapper会自动的切换,maven wrapper是第三方提供的,所以要把他的jar包导入。
.gitignore
- git忽略提交规则
mvnw
- 是linux的脚本文件,mvnw 是maven wrapper,maven中的插件具有滞后性,即有的插件只针对某个版本有效,这里在用的时候,可能会安装多个版本的maven,为了解决这个问题,maven wrapper会自动的切换。
mvnw.cmd
- 是windows的脚本文件,作用同上
pom文件解析
- 依赖没有版本号,是从父工程中选择继承的(应该是父工程的父工程,爷爷辈)。这个依赖叫做起步依赖,这些第三方的依赖是写在了dependencymanagement中,所以我们的项目如果要使用的话,还需要些依赖,只不过版本号是可以省略的。如果不想使用spring boot的默认版本的话,自己手动添加版本号即可
Spring Boot starter
starter
传统的 Spring 项目想要运行,不仅需要导入各种依赖,还要对各种 XML 配置文件进行配置,十分繁琐,但 Spring Boot 项目在创建完成后,即使不编写任何代码,不进行任何配置也能够直接运行,这都要归功于 Spring Boot 的 starter 机制。本节我们将对 stater 进行介绍。
Spring Boot 将日常企业应用研发中的各种场景都抽取出来,做成一个个的 starter(启动器),starter 中整合了该场景下各种可能用到的依赖,用户只需要在 Maven 中引入 starter 依赖,SpringBoot 就能自动扫描到要加载的信息并启动相应的默认配置。starter 提供了大量的自动配置,让用户摆脱了处理各种依赖和配置的困扰。所有这些 starter 都遵循着约定成俗的默认配置,并允许用户调整这些配置,即遵循“约定大于配置”的原则。
并不是所有的 starter 都是由 Spring Boot 官方提供的,也有部分 starter 是第三方技术厂商提供的,例如 druid-spring-boot-starter 和 mybatis-spring-boot-starter 等等。当然也存在个别第三方技术,Spring Boot 官方没提供 starter,第三方技术厂商也没有提供 starter。
以 spring-boot-starter-web 为例,它能够为提供 Web 开发场景所需要的几乎所有依赖,因此在使用 Spring Boot 开发 Web 项目时,只需要引入该 Starter 即可,而不需要额外导入 Web 服务器和其他的 Web 依赖。
在 pom.xml 中引入 spring-boot-starter-web,示例代码如下。
<dependencies>
<!--导入 spring-boot-starter-web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
...
</dependencies>
...
在Idea中查看所有依赖,我们可以看到 Spring Boot 导入了 springframework、logging、jackson 以及 Tomcat 等依赖,而这些正是我们在开发 Web 项目时所需要的。
您可能会发现一个问题,即在以上 pom.xml 的配置中,引入依赖 spring-boot-starter-web 时,并没有指明其版本(version),但在依赖树中,我们却看到所有的依赖都具有版本信息,那么这些版本信息是在哪里控制的呢?
其实,这些版本信息是由 spring-boot-starter-parent(版本仲裁中心) 统一控制的。
spring-boot-starter-parent
spring-boot-starter-parent 是所有 Spring Boot 项目的父级依赖,它被称为 Spring Boot 的版本仲裁中心,可以对项目内的部分常用依赖进行统一管理。
关于Maven聚合项目,父子工程的解读,在Maven入门与精通中有详细的讲解。
<!--SpringBoot父项目依赖管理-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
Spring Boot 项目可以通过继承 spring-boot-starter-parent 来获得一些合理的默认配置,它主要提供了以下特性:
- 默认 JDK 版本
- 默认字符集
- 依赖管理功能
- 资源过滤
- 默认插件配置
- 识别 application.properties 和 application.yml 类型的配置文件
查看 spring-boot-starter- parent 的底层代码,可以发现其有一个父级依赖 spring-boot-dependencies。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.3.5</version>
</parent>
spring-boot-dependencies 的底层代码如下。
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.3.5</version>
<packaging>pom</packaging>
<name>spring-boot-dependencies</name>
<description>Spring Boot Dependencies</description>
<url>https://spring.io/projects/spring-boot</url>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0</url>
</license>
</licenses>
<developers>
<developer>
<name>Spring</name>
<email>ask@spring.io</email>
<organization>VMware, Inc.</organization>
<organizationUrl>https://www.spring.io</organizationUrl>
</developer>
</developers>
<scm>
<url>https://github.com/spring-projects/spring-boot</url>
</scm>
<issueManagement/>
<properties>
<activemq.version>6.1.3</activemq.version>
<angus-mail.version>2.0.3</angus-mail.version>
<artemis.version>2.33.0</artemis.version>
<aspectj.version>1.9.22.1</aspectj.version>
<assertj.version>3.25.3</assertj.version>
....
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-amqp</artifactId>
<version>${activemq.version}</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-blueprint</artifactId>
<version>${activemq.version}</version>
</dependency>
...
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>${build-helper-maven-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>${flyway.version}</version>
</plugin>
...
</plugins>
</pluginManagement>
</build>
</project>
以上配置中,部分元素说明如下:
- dependencyManagement :负责管理依赖;
- pluginManagement:负责管理插件;
- properties:负责定义依赖或插件的版本号。
spring-boot-dependencies 通过 dependencyManagement 、pluginManagement 和 properties 等元素对一些常用技术框架的依赖或插件进行了统一版本管理,例如 Activemq、Spring、Tomcat 等。
主程序类-主入口类
/**
* @SpringBootApplication: Spring Boot应用标注在某个类上说明这个类是Spring Boot的主配置类,Spring Boot就应该运行这个类的main方法来启动Spring Boot应用
*/
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
下面看一下SpringBootApplication注解中组成
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
// 1、
@SpringBootConfiguration
// 2、
@EnableAutoConfiguration
// 3、
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
}
@SpringBootApplication注解是springboot的核心注解。使用这个注解相当于加上了下面三个注解:
1、@SpringBootConfiguration :SpringBoot的配置类,标注在某个类上,表示这是一个Spring Boot的配置类
- @Configuration:配置类 , 允许将其他@bean注解标识的类加入到spring容器中,相当于spring配置文件中的beans标签
2、@EnableAutoConfiguration:开启自动配置功能;
// 自动配置包
@AutoConfigurationPackage
// Spring的底层注解@Import,给容器中导入一个组件
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
3、@ComponentScan
自动扫描当前包和子包下的标有@Component,@Service,@Repository,@Controller的类。相当于以前spring配置文件中的context:component-scan
启动图案
SpringBoot默认会加载classpath下的 banner.txt、banner.gif
, banner.jpg
, or banner.png
静态图案
在线生成:http://patorjk.com/
经典图案 :https://blog.csdn.net/vbirdbest/article/details/78995793
在resources/目录下创建名为banner.txt的文件,内容如下生成
Spring Boot Version: ${spring-boot.version}
////////////////////////////////////////////////////////////////////
// _ooOoo_ //
// o8888888o //
// 88" . "88 //
// (| ^_^ |) //
// O = /O //
// ____/`---'____ //
// .' \| |// `. //
// / \||| : |||// //
// / _||||| -:- |||||- //
// | | \ - /// | | //
// | _| ''---/'' | | //
// .-__ -
___/-. / //
// ___. .' /--.--
. . ___ //
// ."" '< `.____<|>_/___.' >'"". //
// | | : -
.; _ /
;./ -
: | | //
// -. _ __ /__ _/ .-
/ / //
// ========-.____
-.________/___.-`____.-'======== //
// `=---=' //
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
// 佛祖保佑 永不宕机 永无BUG //
////////////////////////////////////////////////////////////////////
当banner的文件名不是banner.txt时,可通过配置识别到
application.yml
spring:
banner:
location: classpath:banner.txt
动态图案
application.yml
spring:
banner:
image:
location: classpath:banner.gif
关闭banner
方式一:启动时添加参数
--spring.main.banner-mode=off
方式二: 编码方式
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Application.class);
app.setBannerMode(Banner.Mode.OFF);
app.run(args);
}
}
还没有人赞赏,快来当第一个赞赏的人吧!
- 2¥
- 5¥
- 10¥
- 20¥
- 50¥
声明:本文为原创文章,版权归信息岛所有,欢迎分享本文,转载请保留出处!