文档章节

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

pxk
 pxk
发布于 2017/09/10 16:59
字数 1565
阅读 482
收藏 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

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

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

阿郎_
09/24
0
0
springboot 开发入门,及问题汇总

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

崔江昆
2015/03/18
0
30
SpringBoot 2.0 系列006 --启动实战之注解使用

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

路上有你0314
05/18
0
0
SpringBoot系列一:SpringBoot入门

原文出处:晴枫 1 SpringBoot HelloWorld 功能:浏览器发送 sayHello 请求,服务器接受请求并处理,响应 Hello。 1.1 创建一个maven工程 com.seagetechspringboot-helloworld1.0.0 1.2 下载官...

晴枫
11/21
0
0
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

没有更多内容

加载失败,请刷新页面

加载更多

为什么只有你每次提交代码,log里面会出现merge

http://www.cnblogs.com/Sinte-Beuve/p/9195018.html

踏破铁鞋无觅处
1分钟前
0
0
如何学习大数据:spark发布程序

一、对于spark程序只是用于默认的spark包的情况 直接点击pcakage 将程序进行在linux当中进行发布 客户端模式:测试 spark-submit --class com.keduox.App \ --master yarn \ --deploy-mode ...

架构师springboot
1分钟前
0
0
oracle job(定时任务)

创建 定时任务 job declare job number;BEGIN DBMS_JOB.SUBMIT( JOB => job, -- job任务的唯一标识(自动生成) WHAT => 'INSERT into TEXTL (id) VALUES(TEXT......

骑羊放狼灬
5分钟前
0
0
Spring声明式事务在抛出异常时不回滚(RollBack)

Spring声明式事务默认只在RuntimeException时Rollback(回滚),不当的try catch会导致事务不回滚。 spring事务默认运行时异常回滚,RuntimeException 配置时添加异常回滚 rollback-for="Th...

叶落花开
5分钟前
0
0
赋能时空云计算 阿里云数据库时空引擎Ganos上线

随着移动互联网、位置感知技术、对地观测技术的快速发展,时空信息已从传统GIS行业渗透到大众应用及各行各业。从静态POI(兴趣点)到APP位置信息,从导航电子地图到车辆行驶轨迹,从卫星影像...

阿里云云栖社区
7分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部