string-boot详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sunguodong_/article/details/79242925

主要讲解点:

1、 Spring Boot工程的创建和启动(重点)

2、 Spring Boot的自动配置(重点)

3、 Spring Boot的起步依赖(重点)

4、 Spring Boot的命令行(了解)

5、 Spring BootActuator(有空再去深究)

一、Spring Boot是什么?

Spring Boot不是应用服务器。这个误解是这样产生的: Spring Boot可以把Web应用程序变为可自执行的JAR文件,不用部署到传统Java应用服务器里就能在命令行里运行。 Spring Boot在应用程序里嵌入了一个Servlet容器(TomcatJettyUndertow) ,以此实现这一功能。但这是内嵌的Servlet容器提供的功能,不是Spring Boot实现的。
    与之类似, Spring Boot也没有实现诸如JPAJMSJava Message ServiceJava消息服务)之类的企业级Java规范。它的确支持不少企业级Java规范,但是要在Spring里自动配置支持那些特性的Bean。例如, Spring Boot没有实现JPA,不过它自动配置了某个JPA实现(比如Hibernate)的Bean,以此支持JPA
    最后, Spring Boot没有引入任何形式的代码生成,而是利用了Spring 4的条件化配置特性,以及MavenGradle提供的传递依赖解析,以此实现Spring应用程序上下文里的自动配置。
    简而言之,从本质上来说,Spring Boot就是Spring,它做了那些没有它你自己也会去做的Spring Bean配置。谢天谢地,幸好有Spring Boot,你不用再写这些样板配置了,可以专注于应用程序的逻辑

二、为什么要用Spring Boot

简化Spring应用程序的开发,让开发人员把精力放在程序功能和业务上。

虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始, SpringXML配置,而且是很多XML配置。 Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。 Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。尽管如此,我们依旧没能逃脱配置的魔爪。开启某些Spring特性时,比如事务管理和SpringMVC,还是需要用XMLJava进行显式配置。启用第三方库时也需要显式配置,比如基于ThymeleafWeb视图。配置Servlet和过滤器(比如SpringDispatcherServlet)同样需要在web.xmlServlet初始化代码里进行显式配置。组件扫描减少了配置量, Java配置让它看上去简洁不少,但Spring还是需要不少配置。所有这些配置都代表了开发时的损耗。因为在思考Spring特性配置和解决业务问题之间需要进行思维切换,所以写配置挤占了写应用程序逻辑的时间。和所有框架一样, Spring实用,但与此同时它要求的回报也不少。

除此之外,项目的依赖管理也是件吃力不讨好的事情。决定项目里要用哪些库就已经够让人头痛的了,你还要知道这些库的哪个版本和其他库不会有冲突,这难题实在太棘手。并且,依赖管理也是一种损耗,添加依赖不是写应用程序代码。一旦选错了依赖的版本,之而来的不兼容问题毫无疑问会是生产力杀手。---摘自spring boot实战》

通过以上的介绍,我们应该明确传统spring 编程带来如下问题

1、 大量配置文件spring bean,tx,mvc,servlet等)

2、 依赖问题(功能所需要的依赖,依赖之间冲突

3、重复性配置(Spring开发的Web应用程序必需的通用样板重复出现

三、Spring Boot主要思想

Spring Boot提供了一种新的编程范式,能在最小的阻力下开发Spring应用程序。有了它,你可以更加敏捷地开发Spring应用程序,专注于应用程序的功能,不用在Spring的配置上多花功夫,甚至完全不用配置。实际上, Spring Boot的一项重要工作就是让Spring不再成为你成功路上的绊脚石。具体体现如下思想:

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

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

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

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

总之,每一个特性都在通过自己的方式简化Spring应用程序的开发。

四、Spring Boot之自动配置

实际开发过程中,我们会经常配置如下dataSourceJdbcTemplate

 它们只是典型Spring应用程序配置的一小部分。除此之外,还有无数Spring应用程序有着完全相同的方法。 只要是数据源配置且需要JdbcTemplate都需要用到上面的配置。如 果 在 Classpath 里 发 现JdbcTemplate,那么它还会为你配置一个JdbcTemplateBean。你无需操心那些Bean的配置,Spring Boot会做好准备,随时都能将其注入到你的Bean里。

Spring Boot的自动配置远不止JdbcTemplate,它有大把的办法帮你减轻配置负担,这些自动配置涉及Java持久化APIJava Persistence APIJPA)、 Thymeleaf模板、安全和Spring MVC

五、Spring Boot之起步依赖

向项目中添加依赖是件富有挑战的事。你需要什么库?它的GroupArtifact是什么?你需要哪个版本?哪个版本不会和项目中的其他依赖发生冲突?
    Spring Boot通过起步依赖为项目的依赖管理提供帮助。起步依赖其实就是特殊的Maven依赖和Gradle依赖,利用了传递依赖解析,把常用库聚合在一起,组成了几个为特定功能而定制的依赖。举个例子,假设你正在用Spring MVC构造一个REST API,并将JSONJavaScript ObjectNotation)作为资源表述。此外,你还想运用遵循JSR-303规范的声明式校验,并使用嵌入式的Tomcat服务器来提供服务。要实现以上目标,你在Maven至少需要以下8个依赖:
qorg.springframework:spring-core
qorg.springframework:spring-web
qorg.springframework:spring-webmvc
qcom.fasterxml.jackson.core:jackson-databind
qorg.hibernate:hibernate-validator
qorg.apache.tomcat.embed:tomcat-embed-core
qorg.apache.tomcat.embed:tomcat-embed-el
qorg.apache.tomcat.embed:tomcat-embed-logging-juli
不过,如果打算利用Spring Boot的起步依赖,你只需添加Spring BootWeb起步依赖
org.springframework.boot:spring-boot-starter-web) 仅此一个。它会根据依赖传递把其他所需依赖引入项目里,你都不用考虑它们。比起减少依赖数量,起步依赖还引入了一些微妙的变化。向项目中添加了Web起步依赖,实际上指定了应用程序所需的一类功能。因为应用是个Web应用程序,所以加入了Web起步依赖。

与之类似,如果应用程序要用到JPA持久化,那么就可以加入jpa起步依赖。如果需要安全功能,那就加入security起步依赖。简而言之,你不再需要考虑支持某种功能要用什么库了,引入相关起步依赖就行。
    此外, Spring Boot的起步依赖还把你从需要这些库的哪些版本这个问题里解放了出来。起步依赖引入的库的版本都是经过测试的,因此你可以完全放心,它们之间不会出现不兼容的情况

六、Spring Boot之命令行界面

Spring Boot CLISpring Boot非必要组成部分Spring Boot CLI利用了起步依赖和自动配置,让你专注于代码本身。我们来分析一段spring boot代码

@RestController
     class HelloController {
            @RequestMapping("/")
             def hello() {
                   return "Hello World"
           }
      }

你是否注意以上代码中没有importCLI如何知道RequestMappingRestController来自哪个包呢?说到这个问题,那些类最终又是怎么跑到Classpath里的呢?
   说得简单一点, CLI能检测到你使用了哪些类,它知道要向Classpath中添加哪些起步依赖才能让它运转起来。一旦那些依赖出现在Classpath中,一系列自动配置就会接踵而来,确保启用DispatcherServletSpring MVC,这样控制器就能响应HTTP请求了。

七、Spring BootActuator

Spring Boot的最后一块拼图Actuator,其他几个部分旨在简化Spring开发,而Actuator
则要提供在运行时检视应用程序内部情况的能力。安装了Actuator就能窥探应用程序的内部情况,包括如下细节:
Spring应用程序上下文里配置的Bean
Spring Boot的自动配置做的决策
应用程序取到的环境变量、系统属性、配置属性和命令行参数
应用程序里线程的当前状态
应用程序最近处理过的HTTP请求的追踪情况
各种和内存用量、垃圾回收、 Web请求以及数据源用量相关的指标

Actuator通过Web端点和shell界面向外界提供信息。如果要借助shell界面,你可以打开SSHSecure Shell),登入运行中的应用程序,发送指令查看它的情况。

八、Spring Boot工程创建(使用spring initializr初始化项目

通过spring initializr工具构建一个spring boot 项目,说白了就是提供一个工程的基本结构以及一个用于构建代码maven或者gradle的说明文件。官方提供如下几种方式来初始一个spring boot项目工程:

通过Web界面使用。
通过Spring Tool Suite使用。
通过IntelliJ IDEA使用。
使用Spring Boot CLI使用。

1、 通过Web界面创建,访问http://start.spring.io/

2、 通过spring-tool-suite IDE工具来初始

1)选中File,点击New,选择Spring Starter Project

2)创建工程,选择起步依赖

不知道勾选哪些,可以参照Spring Boot实战.pdf 

3)点击Finish完成

3、 通过idea工具来初始化

4、 通过spring boot cli初始化(需要先安装cli,见下方),在命令行输入命令spring init,如图:

demo.zip就是一个spring boot的压缩包,是不是很神奇!

5、 补充:除了以上四种主要创建spring boot工程的方式,还可以自己手动创建maven工程,再添加起步依赖,创建application.properties

4种初始化方式需要安装cli,以下是安装spring boot cli的步骤:

1、 下载cli的安装包

下载地址:http://repo.spring.io/release/org/springframework/boot/spring-boot-cli/

下载感兴趣的版本,本教学选择的是1.3版本

2、 解压目录将该目录bin配置到环境变量

SPRING_BOOT_CLI= D:\spring-boot-cli-1.3.0

path=…; %SPRING_BOOT_CLI%\bin;…

打开cmd检验是否成功:

3、 spring boot cli提供shell 及其命令补全脚本

通过Tab键可以补全提供的命令:

九、启动Spring Boot工程

1、 方式一:找到启动类,右键Run As->Java Application运行启动

2、 方式二:选中工程右键Run As->Spring Boot App

3、方式三:选中工程右键Run As->Maven Build配置spring-boot:run

4、方式四:通过stsBoot Dashboard启动,需要sts3.7及以上版本

找到Window -> Show View -> Boot Dashboard

选中工程,点击start就可以启动了

5、方式五:直接启动install之后的jar

     java -jar xxx.jar

十、修改spring boot启动的banner

1、进入http://patorjk.com/software/taag/

2、在spring boot项目src/main/resource下面新建banner.txt

 

3、在banner.txt将刚才产生的字符串粘贴到该banner.txt文件

4、启动spring boot项目

十一Spring BootActuator使用

这是探究springboot整个运行的状态

步骤:

1、加入spring-boot-starter-actuator起步依赖

2、启动spring boot项目,然后在浏览器上访问

比如想知道所有spring上下文中的bean可以访问:http://localhost:配置的端口/beans

十二、Spring Boot相关注解总结

   @ScanComponent等价于  <context:component-scan basepackage=""/>

   @Configuration等价于applicationContext.xml

   @Import 等价于applicationContext.xml中的<import>标签

   @Bean 等价于applicationContext.xml中的<bean id/name>标签

   @Scope 等价于applicationContext.xml中的<bean>标签中的scope属性

   @RestController=@Controller+@ResponseBody 使用该注解,方法返回一定是数据,而不是视图

   启动相关配置:

   @SpringBootApplication 在类上加入,证明该类是springboot的启动类

   @SpringBootApplication=@Configuration+@ComponentScan+@EnableAutoConfiguration

   加载相关配置:

   1.@EnableAutoConfiguration 这个注解代表自动配置

2.@EnableConfigurationProperties(ThymeleafProperties.class) 加载properties 对应的类

3.@ConditionalOnClass(SpringTemplateEngine.class) 这是代表了条件的注解,该主键中传递的参数是用来判断的

4.@AutoConfigureAfter(WebMvcAutoConfiguration.class)  在参数中声明的类加载完了之后,才会去自动配置

   测试相关配置:

   @RunWith(SpringRunner.class)  SpringRunner 继承了SpringJunit4Runner

   @SpringBootTest 这里可以换成@ContextConfiguration

   

猜你喜欢

转载自blog.csdn.net/sunguodong_/article/details/79242925