简单上手Spring Boot

135 阅读14分钟

Spring Boot是一个用于简化和加速Java应用程序开发的开源框架。它基于Spring框架,旨在提供一种约定优于配置的方式来构建独立、可部署的Spring应用程序。

Spring Boot的设计目标是使开发者能够更快速、更轻松地创建基于Spring的应用程序,同时尽可能减少样板代码和繁琐的配置。它通过提供默认配置和自动化的特性,简化了应用程序的搭建和部署过程。

以下是Spring Boot的一些主要特点和功能:

  1. 自动配置:Spring Boot根据应用程序的依赖和环境自动配置各种Spring和第三方库。它通过约定和默认值来自动配置,减少了手动配置的需求。你可以根据需要进行自定义配置,但通常不需要大量的配置。
  2. 独立运行:Spring Boot应用程序可以作为独立的可执行JAR文件运行,不需要外部的应用服务器。它内嵌了一个嵌入式的Servlet容器(如Tomcat、Jetty或Undertow),可以直接运行应用程序。
  3. 起步依赖:Spring Boot提供了一系列的“起步依赖”(Starter Dependencies),它们是预配置的依赖项集合,可以方便地引入常用的功能和库。通过引入适当的起步依赖,你可以快速集成数据库访问、Web开发、安全性、日志记录等功能。
  4. Actuator:Spring Boot提供了Actuator模块,用于监控和管理应用程序。它提供了一组HTTP端点,可以查看应用程序的健康状况、性能指标、配置信息等。这对于运维和监控应用程序非常有用。
  5. 简化的部署:Spring Boot支持将应用程序打包为可执行的JAR文件或WAR文件,并提供了一些部署选项,如Docker容器化部署。这使得应用程序的部署变得简单和灵活。

当谈到Spring Boot的自动配置时,它是指Spring Boot根据应用程序的依赖和环境,自动为应用程序配置Spring框架和第三方库的行为和功能。

自动配置的核心思想是约定优于配置。Spring Boot通过一系列的条件和默认值来实现自动配置,以减少开发者在项目中进行手动配置的工作量。以下是自动配置的一些关键点:

  1. 条件化配置:Spring Boot的自动配置是基于条件的。它使用条件注解(例如@ConditionalOnClass@ConditionalOnProperty等)来判断是否满足某些条件,如果满足条件,则自动配置相应的功能。
  2. 自动装配器:Spring Boot使用自动装配器(AutoConfigurers)来实现自动配置。自动装配器是一组配置类,它们使用条件注解和@Configuration注解来定义自动配置的行为。每个自动装配器通常关注一个特定的功能领域,例如数据库访问、Web开发等。
  3. 默认属性:Spring Boot使用默认属性来提供默认配置。默认属性是在spring-boot-autoconfigure模块中定义的,它们为各种库和框架提供了默认值。你可以在你的应用程序的配置文件中覆盖这些属性,以进行自定义配置。
  4. 自定义配置:尽管Spring Boot提供了自动配置,但你仍然可以根据需要进行自定义配置。你可以在应用程序的配置文件中设置属性,或者创建自己的配置类,并使用@Configuration和相关的注解进行配置。

通过自动配置,Spring Boot可以根据应用程序的依赖和环境,自动启用一些常见的功能,例如数据库访问、Web开发、安全性等。例如,如果你在项目中引入了Spring Data JPA依赖,并且配置了数据库连接的属性,Spring Boot会自动为你配置JPA相关的Bean和数据源。

自动配置的好处是显而易见的,它减少了手动配置的工作量,提高了开发效率。但有时候,自动配置可能会导致意外的行为,因此在需要特定配置的情况下,你仍然可以进行自定义配置来覆盖默认的自动配置行为。

独立运行是Spring Boot的一个重要特性,它使得应用程序可以作为独立的可执行JAR文件运行,而不需要依赖外部的应用服务器。下面详细介绍一下独立运行的特点和优势:

  1. 内嵌Servlet容器:Spring Boot内嵌了一个嵌入式的Servlet容器(如Tomcat、Jetty或Undertow),它可以直接运行应用程序,而不需要额外安装和配置外部的应用服务器。这样一来,你可以将应用程序打包成一个独立的可执行JAR文件,然后通过简单的命令即可启动应用程序。
  2. 简化部署过程:独立运行使得应用程序的部署变得简单和灵活。你只需要将打包好的可执行JAR文件部署到目标环境中,然后通过命令启动即可。不需要繁琐的安装和配置过程,也不需要手动部署到外部应用服务器中。
  3. 版本控制和发布:独立运行使得应用程序的版本控制和发布变得更加方便。你可以将每个版本的应用程序打包成一个独立的JAR文件,然后将其上传到版本控制系统(如Git)中进行管理。每次发布新版本时,只需要将新的JAR文件部署到目标环境中,不会影响到其他已部署的版本。
  4. 可移植性:独立运行使得应用程序具有较高的可移植性。你可以将应用程序的可执行JAR文件部署到任意支持Java运行环境的机器上,只要目标机器上安装了适当的Java版本即可。这样一来,你可以轻松地在不同的环境中部署和运行应用程序,而不需要担心应用服务器的配置和兼容性问题。

总的来说,独立运行是Spring Boot的一个重要特性,它使得应用程序的部署和运行变得简单、灵活和可移植。通过将应用程序打包成独立的可执行JAR文件,并内嵌一个嵌入式的Servlet容器,你可以快速地部署和运行应用程序,而不需要额外的配置和依赖。这为开发者提供了更加便捷和高效的开发和部署方式。

起步依赖(Starter Dependencies)是Spring Boot的另一个重要特性,它为开发者提供了一种简化依赖管理的方式。起步依赖是一组预配置的依赖项,它们一起工作以提供特定功能的开发环境。下面详细解释一下起步依赖的特点和用途:

  1. 简化依赖管理:起步依赖简化了依赖管理的过程。通常,在使用传统的Spring框架时,你需要手动引入各种不同的依赖项,并确保它们之间的版本兼容性。而起步依赖通过提供一组预配置的依赖项,自动解决了版本兼容性问题,使得依赖管理变得更加简单和方便。
  2. 功能集成:起步依赖提供了一种将不同的库和框架整合到应用程序中的方式。每个起步依赖通常关注一个特定的功能领域,例如数据库访问、Web开发、安全性等。通过引入适当的起步依赖,你可以快速地集成所需的功能,而不需要手动配置和管理相关的依赖项。
  3. 自动配置:起步依赖通常会包含自动配置(Auto-Configuration)类。这些自动配置类使用条件注解和默认属性来自动配置应用程序的行为。通过引入起步依赖,你可以轻松地启用自动配置,而不需要手动编写大量的配置代码。
  4. 可选依赖:起步依赖还可以包含一些可选的依赖项。这些可选依赖项通常用于特定的场景或功能扩展。你可以根据需要选择性地引入这些可选依赖项,以满足应用程序的特定需求。

使用起步依赖的步骤很简单。你只需要在项目的构建文件(如Maven的pom.xml或Gradle的build.gradle)中引入相应的起步依赖,然后构建工具会自动下载和管理这些依赖项。你也可以通过搜索Spring Initializr网站(start.spring.io )来生成包含起步依赖的项目模板

Actuator是Spring Boot提供的一个功能强大的模块,用于监控和管理应用程序。它提供了一组用于监控、管理和与应用程序进行交互的端点(endpoints)。下面详细介绍一下Actuator的主要特点和用途:

  1. 健康监测:Actuator提供了一个健康监测的端点,可以用于检查应用程序的运行状态。通过该端点,你可以了解应用程序是否正常运行,并获取关于内存使用、线程状态、数据库连接等方面的健康信息。
  2. 度量指标:Actuator还提供了一组度量指标的端点,用于监控应用程序的性能和资源使用情况。你可以获取关于请求处理时间、CPU利用率、内存使用、线程池状态等方面的度量指标信息。
  3. 环境配置:Actuator的环境配置端点允许你查看应用程序的当前配置信息。你可以获取应用程序的配置属性、系统属性、环境变量等信息。
  4. 日志管理:Actuator提供了一个日志管理的端点,可以用于查看和修改应用程序的日志配置。你可以查看当前的日志级别,以及动态地修改日志级别,方便进行调试和故障排查。
  5. 线程转储:Actuator的线程转储端点允许你获取应用程序的线程转储信息。这对于分析应用程序的性能问题和死锁问题非常有帮助。
  6. 远程操作:Actuator还支持远程操作,你可以通过HTTP请求与应用程序的端点进行交互。例如,你可以通过发送POST请求来触发应用程序的某个操作或修改配置。

为了使用Actuator,你需要在项目的依赖中添加spring-boot-starter-actuator。默认情况下,Actuator会启用一组常用的端点,你可以通过配置文件或代码来自定义启用的端点和其它属性。

Actuator的端点可以通过HTTP请求访问,默认情况下,它们位于/actuator路径下。例如,你可以通过访问/actuator/health来获取健康监测信息,或者通过访问/actuator/metrics来获取度量指标信息。

以下是一个简单的实例代码:

首先在pom.xml引入springboot的启动器

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.lexed</groupId>
  <artifactId>SpringBoot001</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <!-- 创建springboot项目,必须继承父类依赖 :spring-boot-starter-parent-->
  <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>1.5.9.RELEASE</version>
  </parent>
  <!-- 引入springboot的启动器 -->
  <dependencies>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
  </dependencies>
</project>

然后定义一个父类包,我这里定义为com.lexed,这是为继承Spring Boot的默认配置和依赖项。这样做有以下几个好处:

  1. 统一管理依赖项版本:Spring Boot的父类包会定义一组默认的依赖项版本,这些版本经过测试和验证,可以保证在项目中使用的依赖项具有兼容性。通过继承父类包,你无需手动指定每个依赖项的版本,而是直接使用父类包中定义的版本。
  2. 自动配置:Spring Boot的父类包中包含了许多自动配置类,可以根据项目的依赖项和配置文件自动配置应用程序。这样可以大大简化项目的配置工作,减少手动配置的代码量。
  3. 默认设置:Spring Boot的父类包中定义了一些默认设置,如默认的日志配置、默认的错误处理机制等。这些默认设置可以帮助你快速启动一个基本的Spring Boot应用程序,并且可以根据需要进行定制

然后定义一个子类包,我这里命名为com.lexed.controller

package com.lexed.controller;


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
/*
 * @RestController=@Controller+@ResponseBody
 * */
@RestController
@RequestMapping("/HelloWorld")
public class HelloWorld {
	
	/*@RequestMapping("/hello")
	@ResponseBody
	public String hello(){
		System.out.println("hello");
		return "hello SpringBoot6666";
	}*/
	
	@RequestMapping("/hello")
	
	public String hello(){
		System.out.println("hello");
		return "hello SpringBoot6666";
	}


}

在这个示例中,HelloWorld类包含了一个hello方法,它使用了@RequestMapping注解来指定处理的URL路径为/HelloWorld/hello。当客户端发送请求到该路径时,该方法将被调用。

@RestController注解是@Controller@ResponseBody注解的组合,它表示该类是一个控制器,并且所有的方法都会返回响应体。因此,在hello方法中,它直接返回了一个字符串作为响应。

然后在父包中编写以下代码:

package com.lexed;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/*
 * @SpringBootApplication:来标注springboot程序的启动器类
 *                       springboot核心注解(主要作用就是开启spring的自动配置)
 * */
@SpringBootApplication
public class HelloApplication {
	//项目启动入口
	public static void main(String[] args){
		//让springboot程序运行起来
		SpringApplication.run(HelloApplication.class, args);
	}
		
	

}

在这个示例中,HelloApplication类是Spring Boot程序的入口点。通过main方法中的SpringApplication.run()方法,可以启动Spring Boot应用程序。

@SpringBootApplication注解是Spring Boot的核心注解之一,它的作用是开启Spring的自动配置。该注解会自动扫描并加载应用程序中的组件、配置和依赖项,并进行必要的配置和初始化。

通过运行HelloApplication类,你可以启动该Spring Boot应用程序。它将自动加载并启动内嵌的Servlet容器,并根据配置和注解进行自动配置和初始化。

最后直接运行父包中的代码,打开浏览器,在浏览器中输入http://localhost:8080/HelloWorld/hello,就能够看到返回的字符串"hello SpringBoot6666"。

Spring Boot是一个用于构建独立、可扩展且易于部署的Java应用程序的框架。它提供了许多优势,使得开发和部署Spring应用程序更加便捷和高效。以下是一些Spring Boot的优势:

  1. 简化的开发流程:Spring Boot提供了自动配置功能,可以根据应用程序的依赖和配置来自动配置Spring框架,减少了开发人员的配置工作,提高了开发效率。
  2. 内嵌Servlet容器:Spring Boot内置了常用的Servlet容器(如Tomcat、Jetty等),可以直接将应用程序打包成可执行的JAR文件,并通过简单的命令就可以运行,无需额外的部署步骤。
  3. 自动依赖管理:Spring Boot通过自动依赖管理,可以根据应用程序的需求自动引入所需的依赖库,简化了依赖管理的过程。
  4. 健康检查和监控:Spring Boot提供了健康检查和监控的功能,可以方便地监控应用程序的运行状态、性能指标和健康状况。
  5. 配置简化:Spring Boot采用了约定大于配置的原则,通过提供默认的配置和约定的命名规则,简化了配置文件的编写和管理。
  6. 集成常用组件:Spring Boot集成了许多常用的组件和框架,如Spring MVC、Spring Data、Spring Security等,可以方便地进行开发和集成。
  7. 可插拔的功能:Spring Boot提供了丰富的可插拔的功能,可以根据应用程序的需求选择性地添加或移除功能模块,灵活满足不同的业务需求。
  8. 社区支持和活跃度:Spring Boot拥有庞大的开发者社区和活跃的维护团队,可以获得丰富的文档、教程和问题解答,方便开发者学习和解决问题。