SpringBoot基础知识概览

特性

核心理念:约定优于配置

特点:

1、 开箱即用,根据项目依赖自动配置

2、 功能强大的服务体系,如嵌入式服务、安全

3、 绝无代码生成,不用写.xml配置,用注解和java配置来完成

4、 完美融合第三方技术

SpringBoot注解

核心注解及其组成

一、 SpringBoot的核心注解

SpringBoot的核心注解是@SpringBootApplication,用来标识主配置类,才能启动项目

@SpringBootApplication是一个复合注解,Ctrl键进入之后可以看到它的多个组合注解

其中重点的注解是@SpringBootConfiguration和@EnableAutoConfiguration还有@ComponentScan

@SpringBotConfiguration

@SpringBootConfiguration注解包含一个注解@Configuration表示这是一个配置类(代替以前使用的配置文件)

@Configuration含义:

1、 表示该类是一个配置类

2、 加了这个注解的类会自动加入Spring容器内(Spring中使用的是@Component注解)

@EnnableAutoConfiguration

@EnableAutoConfiguration使SpringBoot可以自动配置(即约定优于配置)

@EnableAutoConfiguration注解中又包含了多个注解

其中重点的注解是@AutoConfigurationPackage和@Import({AutoConfigurationImportSelector.class})

@AutoConfigurationPackage自动将包装入到扫描器

实现过程:

因为@AutoConfigurationPackage注解中又又一个注解@Import(Register.calss)

进入到Register里面可以看到

这个函数就可以将@SpringBootApplication所在类的包及其子包纳入Spring容器

@Import({AutoConfigurationImportSelectot.class})可以引入三方依赖纳入到Spring容器(上面注解是将自己写的包纳入容器)

实现过程:

进入AutoConfigurationImportSelectot类中可以看到有一个函数selectImports,这个函数就是用来引入三方依赖 根据META-INF下面的spring.factories来装配第三方依赖

总结:

编写项目时,一般会对自己写的代码以及三方依赖 进行配置。但是spring boot可以自动进行配置:

1、 自己写的代码,spring boot通过@SpringBootConfiguration自动帮我们配置;

2、 三方依赖 通过spring-boot-autoconfigure-2.0.3.RELEASE.jar中的META-INF/spring.factories进行声明,然后通过@EnableAutoConfiguration开启使用即可

3、 如何自动装配(以研究org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration为例分析)

观察源码分析可知:

1、 有一个@Configuration表示这是一个配置类,可以自动放到SpringIoc容器中

2、 然后有@ConditionalOnProperties(HttpEncodingProperties.class),我们可以进入到这个class里面看到这里面将默认编码方式设置为UTF_8

我们可以用类开始声明的prefix+属性名在配置文件中修改

### 总结:
(1) 每一个XxAutoConfiguration 都有很多条件@ConditionalOnXxx,当这些条件都满足时,则此配置自动装配生效
但是我们可以手工修改改 自动装配: XxxProperties文件中的prefix.属性名=value (2) 如何知道spring boot开启了哪些自动装配、禁止了哪些自动装配: 在application.properties中添加 debug=true
Positive matches列表 表示 spring boot自动开启的装配
Negative matches列表 表示spring boot在此时 并没有启用的自动装配。

配置文件

1、 SpringBoot有哪几种配置文件?有什么区别

配置文件按照应用特性分可分为application文件和bootstrap文件两种

这两个文件又分别有.yml和.properties两种格式

appication和bootstrap区别

application文件主要用于SpringBoot项目的自动化配置

bootscrap文件的特性是由父ApplicationContext加载,优先于application加载,且当中的属性不能被覆盖

因此bootstrap文件的应用场景主要是

*使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;

*一些固定的不能被覆盖的属性

*一些加密/解密的场景;

.yml和.properties格式区别

主要是书写格式的不同

.yml格式文件采用k:空格v,通过垂直对齐来指定层次关系的方式来书写

.properties格式文件采用k=v的形式书写

当这两个文件同时存在,且属性覆盖冲突时,.properties的优先级比.yml优先级高

.yml文件不支持@PropertyResource注解自动导入配置

application.properties和application.yml文件可以存在于四个地方

1、 file:项目根目录\

2、 file:项目根目录\conf\

3、 classpath:项目根目录\

4、 classpath:项目根目录\conf

这四个地方存储的文件中设置的属性若不冲突则相互补充,若冲突则优先级从高到低


修改SpringBoot默认约定的几种设置参数方法

1、 内部配置文件,如上面所述的.yml和.properties文件

2、 外部配置文件D:/appication.properties,如果一个属性配置在内部文件和外部文件中冲突,则外部>内部

调用外部配置文件的两种方式:

* 打成jar包后在命令行配置java -jar 项目名.jar --spring.config.location = D:/application.properties

* 在编辑器(如IDEA)中的Run configuration ,argumenets中配置

3、 命令行运行参数

同理也可以在编辑器中设置Run configuration ,argumenets或者打成jar包之后运行时添加命令行参数

多环境切换(profile)

有静态切换环境和多态切换环境两种方式:

静态切换

静态切换又分为在.properties和在.yml中设置两种方式

1、 设置多个.properties文件

application.properties(默认)

application-dev.properties

application-test.properties

application-prod.properties

在不同的环境配置文件中配置不同的参数,然后在application.properties中设置spring.profiles.active = dev/test/prod

2、 在.yml文件中设置

在.yml文件中配置,不用新建多个文件,配置方式如下

spring: profiles: active: dev --- spring: profiles: dev server: port: 8080 --- spring: profiles: test server: port: 8081

动态切换

1、 在开发工具如IDEA中设置RunConfiguration -Argument -program Argument

增加参数--spring.profiles.active = 环境名

2、 命令行运行jar包时指定运行参数

3、 通过设置jvm参数 RunConfiguration -Argument - VM

增加参数-Dspring.profiles.active = 环境名

SpringBoot注入值的几种方式

1、 使用配置文件注入的方式

(1)默认可识别application.yml和application.properties两个文件的设置
(2)识别.properties文件中的配置,使用@PropertySource(value={"classpath:conf.properties"})注解
(这种方式只能用.properties文件不能使用.yml文件) 使用这种方式在要注入class类上添加@Component和@ConfigurationProperties(prefix = 'xx')
在配置文件里用xx.属性名 = 值来注入值(.yml格式应对于改变)

2、 使用@Value("")直接在属性上注入

3、 两种方式的区别

简单类型:(8个基本类型/String/Date)

4、 使用@ImportSource注入(不推荐用法)

如果写了Spring以前那种.xml配置文件,SpringBoot默认是不识别的

如果非要使用,可以在主配置类上使用@ImportSource(locations="XXXXX")注解来指定路径来注入值

SpringBoot starter

SpringBoot starter 是SpringBoot项目的启动器,SpringBoot将各个应用,第三方框架设置成了一个个‘场景’starter,

你需要用到哪个场景你就引入哪个场景,SpringBoot会自动引入该场景需要的所有依赖

如引入spring-boot-starter-web就会引入构建一个web项目所需要的所有依赖,包括json、tomcat、webmvc

SpringBoot基础系列一的更多相关文章

  1. SpringBoot基础系列-SpringCache使用

    原创文章,转载请标注出处:<SpringBoot基础系列-SpringCache使用> 一.概述 SpringCache本身是一个缓存体系的抽象实现,并没有具体的缓存能力,要使用Sprin ...

  2. SpringBoot基础系列-使用日志

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9996897.html SpringBoot基础系列-使用日志 概述 SpringBoot ...

  3. SpringBoot基础系列-使用Profiles

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9996884.html SpringBoot基础系列-使用Profile 概述 Profi ...

  4. SpringBoot基础系列-SpringBoot配置

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9990680.html SpringBoot基础系列-SpringBoot配置 概述 属性 ...

  5. 【SpringBoot 基础系列】实现一个自定义配置加载器(应用篇)

    [SpringBoot 基础系列]实现一个自定义配置加载器(应用篇) Spring 中提供了@Value注解,用来绑定配置,可以实现从配置文件中,读取对应的配置并赋值给成员变量:某些时候,我们的配置可 ...

  6. 【SpringBoot基础系列】手把手实现国际化支持实例开发

    [SpringBoot基础系列]手把手实现国际化支持实例开发 国际化的支持,对于app开发的小伙伴来说应该比价常见了:作为java后端的小伙伴,一般来讲接触国际化的机会不太多,毕竟业务开展到海外的企业 ...

  7. SpringBoot基础系列之自定义配置源使用姿势实例演示

    [SpringBoot基础系列]自定义配置源的使用姿势介绍 前面一篇博文介绍了一个@Value的一些知识点,其中提了一个点,@Value对应的配置,除了是配置文件中之外,可以从其他的数据源中获取么,如 ...

  8. 【SpringBoot基础系列-实战】如何指定 bean 最先加载(应用篇)

    [基础系列-实战]如何指定 bean 最先加载(应用篇) 在日常的业务开发中,绝大多数我们都是不关注 bean 的加载顺序,然而如果在某些场景下,当我们希望某个 bean 优于其他的 bean 被实例 ...

  9. springBoot基础系列--properties配置

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7183408.html SpringBoot中免除了大部分手动配置,但是对于一些特定的情况, ...

随机推荐

  1. 【译】Flink + Kafka 0.11端到端精确一次处理语义的实现

    本文是翻译作品,作者是Piotr Nowojski和Michael Winters.前者是该方案的实现者. 原文地址是https://data-artisans.com/blog/end-to-end ...

  2. go语言 nsq源码解读三 nsqlookupd源码nsqlookupd.go

    从本节开始,将逐步阅读nsq各模块的代码. 读一份代码,我的思路一般是: 1.了解用法,知道了怎么使用,对理解代码有宏观上有很大帮助. 2.了解各大模块的功能特点,同时再想想,如果让自己来实现这些模块 ...

  3. Ubuntu 16.04 为 root 帐号开启 SSH 登录

    1.先用普通账号登录 2.安装 open ssh: sudo apt-get install openssh-server 3.修改密码: sudo passwd root 4.切换到root账户 s ...

  4. Windows Ubuntu Bash申请免费通配符证书(Let's Encrypt)并绑定IIS

    什么是 Let’s Encrypt? 部署 HTTPS 网站的时候需要证书,证书由 CA 机构签发,大部分传统 CA 机构签发证书是需要收费的,这不利于推动 HTTPS 协议的使用. Let’s En ...

  5. STM32基于固件库新建MDK工程模板(精简版)

    上个博文理论讲解的东西太多,太复杂,这里把所有步骤全部贴出 1.新建一个工程文件夹LED 2.LED文件夹下建立如下文件夹 3.Project –>New Uvision Project 到US ...

  6. XSS过滤JAVA过滤器filter 防止常见SQL注入

    Java项目中XSS过滤器的使用方法. 简单介绍: XSS : 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩 ...

  7. Android--APP性能测试工具GT的使用总结

    GT(随身调)是APP的随身调测平台,它是直接运行在手机上的"集成调测环境"(IDTE, Integrated Debug Environment).利用GT,仅凭一部手机,无需连 ...

  8. zookeeper配置管理+集群管理实战

    引言 之前就了解过kafka,看的似懂非懂,最近项目组中引入了kafka,刚好接着这个机会再次学习下. Kafka在很多公司被用作分布式高性能消息队列,kafka之前我只用过redis的list来做简 ...

  9. 为什么说 Java 程序员到了必须掌握 Spring Boot 的时候?

    Spring Boot 2.0 的推出又激起了一阵学习 Spring Boot 热,就单从我个人的博客的访问量大幅增加就可以感受到大家对学习 Spring Boot 的热情,那么在这么多人热衷于学习 ...

  10. eShopOnContainers 知多少[6]:持久化事件日志

    1. 引言 事件总线解决了微服务间如何基于集成事件进行异步通信的问题.然而只有事件总线正常运行,微服务之间基于事件的通信才得以运转. 而现实情况是,总有这样或那样的问题,导致事件总线不稳定或不可用,比 ...