SpringBoot学习总结(1)之SpringBoot入门篇

一、SpringBoot概述

Spring 框架对于很多 Java 开发人员来说都不陌生。自从 2002 年发布以来,Spring 框架已经成为企业应用开发领域非常流行的基础框架。有大量的企业应用基于 Spring 框架来开发。Spring 框架包含几十个不同的子项目,涵盖应用开发的不同方面。如此多的子项目和组件,一方面方便了开发人员的使用,另外一个方面也带来了使用方面的问题。每个子项目都有一定的学习曲线。开发人员需要了解这些子项目和组件的具体细节,才能知道如何把这些子项目整合起来形成一个完整的解决方案。在如何使用这些组件上,并没有相关的最佳实践提供指导。对于新接触 Spring 框架的开发人员来说,并不知道如何更好的使用这些组件。Spring 框架的另外一个常见问题是要快速创建一个可以运行的应用比较麻烦。Spring Boot Spring 框架的一个新的子项目,用于创建 Spring 4.0 项目。它的开发始于 2013 年。2014 年 4 月发布 1.0.0 版本。它可以自动配置 Spring 的各种组件,并不依赖代码生成和 XML 配置文件。Spring Boot 也提供了对于常见场景的推荐组件配置。Spring Boot 可以大大提升使用 Spring 框架时的开发效率

1.1 Spring的缺点

随着Spring 的功能越来越强,在使用Spring 的时候,门槛也变得高了起来,诸如搭建一个基于Spring 的Web 程序却井不简单,需要进行各种配置。S pring 中一些过时的技术也经常无意地被引用到最新项目中。新手面对同一种需求会面临选择困难,比如处理事务是用XML 配置好,还是使用注解@ Trasactional 好?这是因为Spring 通过多年的发展,本身变得脆肿,过时的使用方式没有被淘汰固然很好,但会给初学者带来使用上的混乱。同时Spring 也集成了越来越多的第三方技术,如何方便地使用这些第三方技术, 各版本之间不会产生冲突也需要一定的实践。尽管Spring 很强大,但它也在犯Java EE 的错误,例如有如下缺点:

  • 使用门槛升高, 要入门Spring 需要较长时间。
  • 对过时技术兼容, 导致使用复杂度升高。
  • XML 配置已经不是流行的系统配置方式。
  • 集成第三方工具时候,程序员还要考虑工具之间的兼容性。
  • 系统启动慢,不具备热部署功能,完全依赖虚拟机或者We b 服务器的热部署。

庆幸的是, Spring 的开发者们及时认识到了这个问题,推出了基于Sprin g 技术的Spring Boot,解决了Spring 的如上问题, 尤其是上手难、技术使用不统一这两个缺点。经过快速发展, SpringBoot 也逐渐被开发人员所喜爱,成为搭建系统非常好的开发框架。正如本书一直强调的, SpringBoot 能极速开发Web 系统,也能容易地架构大的分布式系统。

1.2SpringBoot简介

Springboot简化Spring应用开发,不需要配置就能运行Spring应用,Spring Boot 管理Spring 容器、第三方插件, 并提供很多默认系统级的服务。大部分Sprin g 应用,无论是简单的Web 系统, 还是构建复杂系统,都只需要少量配置和代码就能完成。这有点像每个公司基于Spring框架做的内部开发框架, 不同的是, Spring Boot 更完善、更强大。

Spring Boot 通过Starter 来提供系统级服务, Sprin g Boot 已经提供了一系列Starter ,你也可以开发自己的Starter 。比如需要开发一个Web 应用, 只要在pom.xml 中声明一下即可。


org.springframework.boot
'< artifactid>spring - boot - starter- web

如果你的应用中使用Redis,则使用Spring-boot-starter-data-redis,那么SpringBoot就会自动为你配置好Spring需要的各种配置文件,Redis的jar包,依赖包,以及对应合适的版本,下面是SpringBoot提供的starter。

 

名称 作用
spring-boot-starter-web

Web支持开发,默认使用Tomcat8

spring-boot-starter-aop AOP支持,使用AspectJ
spring-boot-starter-jdbc Spring JDBC
spring-boot-starter-data-jpa JPA方式访问数据库,使用Hibername作为JPA实现
spring-boot-starter-data-elasticsearch 集成E lasticsearch ,默认访问localhost:9200
spring-boot-starter-data-redis 集成Red is ,使用JRedis ,默认连接localhost:6379
spring-boot-starter-cache 缓存, 支持多种缓存方式,如本地的、Redis 、Ehcache 等
spring-boot-devtools 应用程序快速重启的工具,提升开发体验
spring-boot-starter-data-mongodb 集成MongoDB ,默认访问mongo db : // localhosνtest
spring-boot-starter-data-neo4j 集成neo4j , 默认访问localhost:7474
spring-boot-starter-data-gemfire 集成分布式缓存
spring-boot-starter-data-soIr 基于Apache lucene 的搜索平台,默认访问http: //localhost:8983/solr
spring-boot-s tarter-data-cassandra 集成Cassandra,默认访问localhost:7474
spring-boot-sta此er-data-ldap 集成ldap
spring-boot-starter-activemq 消息集成ActiveMQ 支持
spring-boot-starter-amqp 消息集成AMQP 协议支持,如支持RabbitMQ
spring-boot-statrter-atomikos 分布式事务支持,使用atomikos
spring-boot-statrter-itronix 一个开源的分布式事务支持
spring-boot-starter-test 包含JUnit 、Spring Test、Hamcrest 、Mockito 等测试工具
spring-boot-starter-webservices webservice 支持
spring-boot-starter-websocket websocket 支持
spring-boot-starter-jersey REST 应用和Jersey 支持
spring-boot” starter-freemarker Freemaker 支持

 相比Spring,Springboot有一下的优点:

  • 实现约定大于配置,是一个低配置的应用系统框架,不像Spring那样子“地狱般的配置体验”,Springboot不需要配置或者是极少的配置,就能使用Spring的大量功能。
  • 提供了内置的tomcat或者Jetty容器
  • 通过依赖的jar包 管理,自动装配技术,容易支持与其他技术体系、工具集成。
  • 支持热加载,开发体验好。也支持Springboot系统监控,方便了解系统的运行情况。

1.3SpringBoot优缺点

  • 轻松创建独立的Spring应用程序。

  • 内嵌Tomcat、jetty等web容器,不需要部署WAR文件。

  • 提供一系列的“starter”(启动器)来简化的Maven配置,不需要添加很多依赖

  • 开箱即用,尽可能自动配置Spring。

二、SpringBoot精要

Spring将很多魔法带入了Spring应用程序的开发之中,其中最重要的是以下四个核心。

1.自动配置:针对很多Spring应用程序常见的应用功能,Spring Boot能自动提供相关配置

2.起步依赖:告诉Spring Boot需要什么功能,它就能引入需要的库。

3.命令行界面:这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序,无需传统项目构建。

4.Actuator:让你能够深入运行中的Spring Boot应用程序,一套究竟。

三、SpringBoot快速入门

3.1传统Spring项目开发步骤

  • 一个项目结构,其中有一个包含必要依赖的Maven或者Gradle构建文件,最起码要有Spring MVC和Servlet API这些依赖。
  • 一个web.xml文件(或者一个WebApplicationInitializer实现),其中声明了Spring的DispatcherServlet。
  • 一个启动了Spring MVC的Spring配置
  • 一控制器类,以“hello World”相应HTTP请求。
  • 一个用于部署应用程序的Web应用服务器,比如Tomcat。

以上的配置,除了Controller以外,其他的配置都是业务无关的,都是Spring项目需要的通用配置,对于SpringBoot仅仅需要几个简单的配置,就可以快速搭建一个Spring项目。

3.2 SpringBoot快速入门开发(IDEA开发工具)

  1. 新建Sring Initalizr项目

SpringBoot学习总结(1)之SpringBoot入门篇_第1张图片

2.然后点击next,显示为下面这张图片

SpringBoot学习总结(1)之SpringBoot入门篇_第2张图片

3.这里我就不建什么helloworld、hellospringboot之类的项目了,注意工程名字要全小写,package配置的是包名,可以根据自己的喜爱设置,然后点击next

SpringBoot学习总结(1)之SpringBoot入门篇_第3张图片

4.这里我们选择web工程,然后next

SpringBoot学习总结(1)之SpringBoot入门篇_第4张图片

 

5.这里是让我们选择自己的工作路径,建议不要包含中文路径,点击finish,项目架构图如下:

SpringBoot学习总结(1)之SpringBoot入门篇_第5张图片

  • pom.xml:Maven构建说明文件。
  • DemoApplication.java:一个带有main()方法的类,用于启动应用程序(关键)。
  • DemoApplicationTests.java:一个空的Junit测试类,它加载了一个使用Spring Boot字典配置功能的Spring应用程序上下文。
  • application.properties:一个空的properties文件,你可以根据需要添加配置属性。

到此我们一个SpringBoot项目已经搭建好了,接下来我们一起来解析一下pom.xml文件各个配置的依赖关系以及他们的作用。



	4.0.0
	
		org.springframework.boot
		spring-boot-starter-parent
		2.1.3.RELEASE
		 
	
	com.mqc
	demo
	0.0.1-SNAPSHOT
	demo
	Demo project for Spring Boot

	
		1.8
	

	
		
			org.springframework.boot
			spring-boot-starter-web
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	


解析Spring Boot父级依赖


		org.springframework.boot
		spring-boot-starter-parent
		2.1.3.RELEASE
		 
	

这块配置是SpringBoot的父级依赖,有个这个设置,当前项目就是一个SpringBoot的项目了,spring-boot-starter-parent这个是一个特殊的starter,它用来提供相关的Maven默认依赖,使用它之后,常用的包依赖可以省去version标签。关于Spring Boot提供了哪些jar包的依赖,可查看对应你配置的maven仓库位置,我这里配置的是:E:\maven-repository\org\springframework\boot\spring-boot-dependencies\2.1.3.RELEASE\spring-boot-dependencies-2.1.3.RELEASE.pom


        5.15.8
        2.7.7
        1.9.71
        2.6.4
        1.9.2
        3.11.1
        4.0.6
        2.1.4
        3.0.0
        1.9.10
        2.6.2
        3.6.0
        1.4.0
        1.11
        2.5.0
        3.8.1
        1.6
        2.6.1
        2.1.0
        2.7.2
        10.14.2.0
        1.6.1
        4.0.5
        2.10.6
        3.6.3
        6.4.3
        2.1.2
        1.6.0
        1.0.1
        5.2.4
        2.3.28
        2.2.6
        3.0.0
        2.3.1
        2.5.6
        2.8.5
        1.4.197
        1.3
        3.11.1
        1.2.3
        5.3.7.Final
        6.0.14.Final
        3.2.0
        2.4.1
        2.33
        4.1.4
        4.5.7
        4.4.11
        9.4.6.Final
        2.14
        2.9.8
        3.0.12
        1.2.0
        1.3.2
        1.1.0
        2.3.1
        2.3.1
        2.0.1
        1.1.4
        1.0
        1.6.2
        1.0.3
        2.2
        1.3
        2.0.1.Final
        1.1
        1.1.6
        3.0.5
        3.3.2.Final
        7.6.0.Final
        2.0.6
        2.9.1
        2.27
        6.3.1
        9.4.14.v20181114
        8.5.35.1
        2.2.0.v201112011158
        1.0.2
        1.14
        4.5.2
        2.10.1
        ${johnzon-jsonb.version}
        1.1.11
        1.6.0
        3.11.9
        1.5.0
        2.4.0
        1.2
        1.3.1
        4.12
        5.3.2
        2.0.1
        1.2.71
        5.1.4.RELEASE
        3.6.3
        2.11.2
        1.2.3
        1.18.6
        2.3.0
        1.8
        3.1.1
        3.1.0
        3.8.0
        3.1.1
        2.8.2
        3.0.0-M2
        2.22.1
        3.1.1
        2.5.2
        3.1.0
        3.1.1
        3.0.1
        3.1.0
        3.2.1
        3.7.1
        3.0.1
        2.22.1
        3.2.2
        1.1.3
        1.9.11
        2.23.4
        3.8.2
        1.9.2
        6.4.0.jre8
        8.0.15
        1.9.22
        3.1.7
        4.1.33.Final
        2.0.20.Final
        1.1.0
        1.0.4
        42.2.5
        0.5.0
        2.3.0
        4.2.1
        5.4.3
        1.0.2
        Californium-SR5
        3.1.1
        1.3.8
        2.2.6
        1.2.1
        1.5.0
        3.14.0
        2.33.0
        4.3.0
        4.0.1
        1.7.25
        1.23
        7.4.0
        5.1.5.RELEASE
        2.1.4.RELEASE
        4.1.1.RELEASE
        2.0.4.RELEASE
        Lovelace-SR5
        ${spring.version}
        0.25.1.RELEASE
        5.1.3.RELEASE
        2.2.4.RELEASE
        2.3.2.RELEASE
        1.2.0.RELEASE
        2.0.3.RELEASE
        1.2.4.RELEASE
        5.1.4.RELEASE
        Bean-SR3
        3.0.6.RELEASE
        3.25.2
        3.1.0
        ${javax-mail.version}
        3.0.11.RELEASE
        2.0.1
        3.0.3.RELEASE
        3.0.4.RELEASE
        2.3.0
        9.0.16
        4.0.9
        2.0.17.Final
        2.7
        3325375
        0.35
        1.6.3
        1.4.01
        1.0.2
        2.6.2
    

如果你不想使用某个依赖默认的版本,您还可以通过覆盖自己的项目中的属性来覆盖各个依赖项,例如,要升级到另一个Spring Data版本系列,您可以将以下内容添加到pom.xml中。


		1.8
	

起步依赖 spring-boot-starter-xx(启动器)

Spring Boot提供了很多”开箱即用“的依赖模块,都是以spring-boot-starter-xx作为命名的。起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。很多起步依赖的命名都暗示了它们提供的某种或者某类功能。总的spring-boot-starter-xx就是某一个模块功能对应的jar集成。

Spring Boot Maven插件


		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	

上面的配置就是Spring Boot Maven插件,Spring Boot Maven插件提供了许多方便的功能:

  • 把项目打包成一个可执行的超级JAR(uber-JAR),包括把应用程序的所有依赖打入JAR文件内,并为JAR添加一个描述文件,其中的内容能让你用java -jar来运行应用程序。
  • 搜索public static void main()方法来标记为可运行类。

SpringBoot 程序入口

DemoApplication是一个很关键的启动类,这里就是整个项目的入口:

package com.mqc.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);
	}

}
  1. @SpringBootApplication是Sprnig Boot项目的核心注解,主要目的是开启自动配置。后续讲解原理的时候再深入介绍。
  2. main方法这是一个标准的Java应用的main的方法,主要作用是作为项目启动的入口。

3.3SpringBoot项目启动方式

  • DemoApplication中的main方法

SpringBoot学习总结(1)之SpringBoot入门篇_第6张图片

 

  • 使用命令 mvn spring-boot:run”在命令行启动该应用,IDEA中该命令在如下位置:

SpringBoot学习总结(1)之SpringBoot入门篇_第7张图片

  • 运行“mvn package”进行打包时,会打包成一个可以直接运行的 JAR 文件,使用“java -jar”命令就可以直接运行

SpringBoot学习总结(1)之SpringBoot入门篇_第8张图片

SpringBoot学习总结(1)之SpringBoot入门篇_第9张图片

最后打开浏览器访问http://localhost:8080, 你就能看到页面显示Hello Spring Boot效果了,一个简单的Web的项目就是如此简单。

你可能感兴趣的:(SpringBoot学习总结)