文档章节

springboot 入门教程(3)-运行原理、关键注解和配置

pxk
 pxk
发布于 2017/09/10 16:59
字数 1565
阅读 465
收藏 6

    springboot提倡约定优于配置的思想,所以提供了很多默认配置,所以大家才会发现搭建一个应用会非常简单,只需要简单几行代码就搞定一个组件的集成。

    那我们就来深入了解下他的原理和关键配置。

1、基本配置

    springboot基本都是通过一个入口类来启动应用,一般命名为Application,里面包含一个main方法,main方法中使用SpringApplication.run(Application.class, args)方法来启动应用。这个入口类一定要在类上加上一个注解:@SpringBootApplication,这个注解是一个组合注解,都是由哪些注解组合的请大家去看源码了没什么可介绍的。

@SpringBootApplication
public class Application {
	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}

}

    springboot支持两种配置文件:properties和yml,官方推荐使用yml(我个人习惯了properties),默认配置文件存放在src/mian/resources目录下,名称为:application.properties或application.yml

    这两个配置文件中能配置很多内容,包括springboot自己的和集成第三方时候的一些配置,但是这些配置全部都是有默认值的,只有需要修改的时候才需要去配置。现在就举几个大家可能会经常用到的

    a、springboot自带web容器的默认端口是8080,如果想修改只需要在上述配置文件中加入server.port=8081;

    b、项目根目录,springboot自带的容器启动后是默认不带项目名的,如果你想带上项目名那添加

         server.context-path=/taskCenter

    以上是在properties中的写法,在yml中应该是

server:
      port:8081
      contextPath:/taskCenter

    starter pom

    这里介绍下springboot最强大的功能,提供大部分企业开发绝大多数场景的starter pom ,也就是集成并默认配置好的第三方组件包,引入starter pom后,springboot就会自动使用默认配置帮我们配置好。

    官方提供了有好几十种,有的开源项目为了支持springboot也提供了starter pom ,详细的内容请移步Starter POMs详解,有详细介绍。      

2、日志配置

    springboot 支持logging、Log4j,Log4j2和Logback作为日志框架,默认使用的是Logback

    logging.file=d:/mylog/log.log

    logging.level.org.springframework.web=DEBUG

3、profile配置

    profile是针对不同环境对不同配置提供支持的,全局的Profile配置使用application-{profile}.properties

    通过在application.properties中设置spring.profiles.active=prod来指定活动的Profile。

4、运行原理

    关于运行原理我们还是从@SpringBootApplication注解开始说起,他是一个组合注解,到底组合了哪些呢?我们看下源码:(如果你用的老版本那源码可能不一样,旧的是使用import注解引入了一个EnableAutoConfigurationImportSelector.class的实现类进行自动配置的,新版本多了一个@EnableAutoConfiguration这个注解,其实@EnableAutoConfiguration注解中实现和旧版本一样也是用的import)

大家可以看到有一个@EnableAutoConfiguration注解,这个就是SpringBoot最强大的注解没有之一,是他帮我们完成了集成的所有默认配置。到底都支持哪些默认配置呢?

进入源码后我们可以看到源码所在的包是:spring-boot-autoconfigure-1.5.6.RELEASE.jar(版本号根据你实际使用的版本决定),这个包中定义了springboot官方支持的所有自动配置的源代码。展开看下就大概知道springboot可以帮我们自动配置哪些东西了。

就这么多,够用了吧,相信你大家进行web开发的时候常用的框架都在这里了,所以springboot就牛逼在这里,很多以前需要写很多配置文件才能搞定的,现在只需要引入包,修改几行配置就可以集成一个框架。是不是很牛逼啊。(关于注解如果大家不熟的话,请恶补下)

有了@EnableAutoConfiguration这个牛逼的注解,接下来我们看下springboot到底怎么实现自动配置的?

1、springboot怎么知道什么时候需要自动配置什么内容呢?其实就是我们在引入了什么样的starter,每引入一个starter,springboot会自动扫描到,然后引入默认配置。

2、从spring4.x引入了强大的条件注解,才有springboot的自动配置,springboot是利用条件注解判断什么时候选择注解中的什么内容。

    条件注解位于org.springframework.boot.autoconfigure.condition这个包下,具体每个注解的含义就不多做介绍了,大家可以去官方看下。

3、很多时候我们都需要修改默认配置,这个默认配置包括最简单的默认参数(前面已经讲过了)和java 配置。当我们需要改变默认配置的逻辑或是加载一些额外的内容,那么就需要我们进行单独的配置。springboot提倡java config,所以在我们的springboot工程里面一般都会有单独的一个目录专门用于修改默认配置或是新增默认配置。

大概流程就是这样了,接下来我们梳理下

    springboot通过@SpringApplication注解启动,启动后通过@EnableAutoConfiguration注解和我们引入到工程中的start进行识别(利用了条件注解),识别出哪些内容需要完成自动配置,配置完成以后启动spring容器。如果你想看看springboot给我们默认配置了哪些内容,你可以在启动的时候加上-debug参数,控制台中就会出现#Atuo Configure  下方的内容就是默认配置项。

   好了,运行的原理(准备期的说应该是流程,并不是什么理论概念)就介绍到这里,下一篇我们就重点讲下springboot中怎么使用spring、spring mvc、serlvlet、fillter这些web开发的内容。

 

    

© 著作权归作者所有

共有 人打赏支持
pxk

pxk

粉丝 87
博文 26
码字总数 26616
作品 0
成都
程序员
微服务 SpringBoot 2.0(三):启动剖析之@SpringBootApplication

我原以为就一个注解,背后竟然还有3个 —— Java面试必修 引言 前面两章我们先后认识了SpringBoot和它的极简配置,为新手入门的学习降低了门槛,会基本的使用后,接下来我们将进一步认识Spr...

阿郎_
09/24
0
0
SpringBoot 2.0 系列006 --启动实战之注解使用

SpringBoot 2.0 系列006 --启动实战之注解使用 一些误区说明 网上很多教程默认使用SpringBootApplcation注解,且只用这个即可扫描启动类包下所有的bean。 而官方默认教程使用的是@EnableAuto...

路上有你0314
05/18
0
0
Spring Boot HelloWorld 解析

开发环境 开发工具:IDEA 2017.2.2 链接: https://pan.baidu.com/s/1qxZLZtBR-Xr7JVkgmhZWzw 密码: wsqp 激活教程:http://idea.lanyus.com/ Spring Boot:2.0.3.RELEASE 参考文档:https://d......

爱编程的帅小伙
07/02
0
0
springboot 开发入门,及问题汇总

1 . springboot简单介绍(http://projects.spring.io/spring-boot/) 现在的web项目几乎都会用到spring框架,而要使用spring难免需要配置大量的xml配置文件,而springboot的出现解 决了这一问...

崔江昆
2015/03/18
0
30
SpringBoot下Redis相关配置是如何被初始化的

参考网页 SpringBoot集成Redis的原理 https://blog.csdn.net/hry2015/article/details/74276423 https://blog.csdn.net/hry2015/article/details/75451705 application.yml配置文件中的属性是......

karma123
07/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

创建第一个react项目

sudo npm i -g create-react-app@1.5.2 create-react-app react-app cd react-apprm -rf package-lock.jsonrm -rf node_modules #主要是为了避免报错npm installnpm start......

lilugirl
今天
1
0
在浏览器中进行深度学习:TensorFlow.js (八)生成对抗网络 (GAN)

Generative Adversarial Network 是深度学习中非常有趣的一种方法。GAN最早源自Ian Goodfellow的这篇论文。LeCun对GAN给出了极高的评价: “There are many interesting recent development...

naughty
今天
0
0
搬瓦工镜像站bwh1.net被DNS污染,国内打不开搬瓦工官网

今天下午(2018年10月17日),继搬瓦工主域名bandwagonhost.com被污染后,这个国内的镜像地址bwh1.net也被墙了。那么目前应该怎么访问搬瓦工官网呢? 消息来源:搬瓦工优惠网->搬瓦工镜像站b...

flyzy2005
今天
6
0
SpringBoot自动配置

本篇介绍下,如何通过springboot的自动配置,将公司项目内的依赖jar,不需要扫描路径,依赖jar的情况下,就能将jar内配置了@configuration注解的类,创建到IOC里面 介绍下开发环境 JDK版本1.8 spr...

贺小五
今天
5
0
命令行新建Maven多项目

参考地址 # DgroupId 可以理解为包名# DartifactId 可以理解为项目名mvn archetype:generate -DgroupId=cn.modfun -DartifactId=scaffold -DarchetypeArtifactId=maven-archetype-quickst......

阿白
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部