这一章接上面的深入理解SpringBoot1:


1, 配置文件占位符,这个是针对.properties文件的,比如:

name=zhangsan${random.uuid}
dog_name=${name:kate}_dog
# 这个意思是如果没有name这个属性,那就用默认的kate

激活配置profile
YMAL 支持多文档块配置profile

server:port: 8081
spring:profiles:active: dev   # 这个地方是用来切换的,选择dev表示用8082那个配置文档# 选择 pro表示用8083那个文档,文档之间用 --- 分开
---
server:port: 8082
spring:profiles: dev
---
server:port: 8083
spring:profiles: pro

也可以在properties文件中指定,新建一个application-dev.properties,所有的配置都写在里面,然后怎么使用这里面的配置呢?在application.properties中指定就行了。

spring.profiles.active=dev   # 表示激活dev文件

不过为了方便起见,还是用上面的yml多文档的方式,还有命令行模式和虚拟机模式也可以,但是这里就不详细介绍了。


下面说一下,配置文件(application.yml/properties等文件)加载位置的优先级:
优先级从上到下依次减少

file:./config
file:./
classpath:/config/
classpath:/

这里的classpath通常我们指的是resource文件夹,优先级高的配置会覆盖优先级低的配置,而且还有互补配置的特效,也就是高优先的用高优先级,高优先没有的,就用低优先级的配置。
最后,我们在发布的时候,可以通过配置spring.config.location来改变默认的位置,比如最后打包成 xxx.jar,我们在发布的时候,java -jar xxx.jar --spring.config.location="C:/ddd/ddd/lo/application.yml" 的方式进行发布。


下面介绍一下springboot的自动配置原理:这个实在是太难了,还是等以后厉害点再来搞定这个事,视频地址: https://www.bilibili.com/video/av59116536?p=19
下面再来说一下条件判断注解 @Conditional,它包含了诸如@ConditionalOnMissingBean这种,比如:

@Bean
@ConditionalOnMissingBean(xx.class)
public xxxx(){}

它表达的意思是,如果容器中没有xx这个类,就把下面的组件注入到容器中,否则就不注入了。


下面介绍springboot的日志系统:

SpringBoot默认使用日志门面:SLF4j,日志实现是:Logback
如何在系统中使用SLF4j,我们可以在SLF4j官网中找到,下面的代码块:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class HelloWorld {public static void main(String[] args) {Logger logger = LoggerFactory.getLogger(HelloWorld.class);logger.info("Hello World");}
}

当你的系统用到了很多的日志框架,怎么让它们统一起来?看下面:

springboot为我们提供了多个jar包来解决这个问题,都能让我们统一用上slf4j,比如,第一个,如果日志系统用的Commons logging API,我们可以用jcl-over-slf4j.jar来代替原来common logging的一些依赖,统一用上slf4j。以上都是把原来日志框架剃掉,转成slf4j需要用上的jar。不同的日志框架具体怎么替换,请看这里。
如何让系统中所有的日志框架都统一到slf4j:

  1. 将系统中其他的日志框架先排除出去
  2. 用中间包替换原来的日志框架
  3. 我们导入slf4j其他的实现

怎么排除出去?我们只需要在pom中如下:

<exclusions><exclusion><groupId>xxxxx</groupId><artifactId>xxxxx</artifactId></exclusion>
</exclusions>

下面来介绍日志的级别:

@SpringBootTest
class ReviewApplicationTests {Logger logger = LoggerFactory.getLogger(getClass());@Testvoid contextLoads2() {// 日志的级别是从上到下依次增加/*** 可以调整日志的级别,日志只会在这个级别以后的高级别生效*/logger.trace("这是trace日志");logger.debug("这是debug日志");logger.info("这是info日志");logger.warn("这是wanner日志");logger.error("这是error日志");}

这里的级别和注释中写的一样的,我们可以调整日志的级别,一些没必要输出的日志可以直接忽略,SpringBoot默认是只输出info及以上级别的日志。
application.properties中也可以指定,日志级别:

logging.level.com.king=trace  # 这是对com.king下所有的类,采用trace级别
logging.file.name=spingboot.log   # 这是对输出的日志文件 springboot

深入理解SpringBoot(2)相关推荐

  1. 深入理解SpringBoot(1)

    之前学习过springboot,但是由于很长一段时间没有用到springboot,想重新学习一遍,决定用一段时间来写一系列深入学习springboot的博客,将会从一些注解,官方文档等多个方面来深入理 ...

  2. 【理解springboot自动装配原理】

    理解springboot自动装配原理: 最近读了小马哥(mercyblitz)Springboot编程思想(核心篇),有了一些心得和感悟,分享给大家: 1. 官网介绍了激活自动装配的方法: * 文档提 ...

  3. 你是如何理解SpringBoot Starters的?

    你是如何理解SpringBoot Starters的? SpringBoot官方对我们平时开发过程中涉及到的场景(数据访问,Web开发)封装成一个个的启动器,我们只需要在项目中引入某个场景的启动器,则 ...

  4. Reactive(3)5分钟理解 SpringBoot 响应式的核心-Reactor

    目录 一.前言 二. Mono 与 Flux 构造器 三. 流计算 1. 缓冲 2. 过滤/提取 3. 转换 4. 合并 5. 合流 6. 累积 四.异常处理 五.线程调度 小结 参考阅读 一.前言 ...

  5. 这篇带你深入理解SpringBoot中的自动装配(好文精读)

    作者: 聂晨 cnblogs.com/niechen/p/9027804.html SpringBoot的自动装配是拆箱即用的基础,也是微服务化的前提.其实它并不那么神秘,我在这之前已经写过最基本的实 ...

  6. 深入理解 SpringBoot 原理

    官网:Spring Boot 文章目录 1.SpringBoot简介 回顾Spring Spring简化Java开发 什么是SpringBoot SpringBoot的大时代背景 2.HelloWor ...

  7. 深入理解SpringBoot之装配条件

    我们知道自动装配是SpringBoot微服务化的核心,它会把META-INF/spring.factoires里配置的EnableAutoConfiguration注册到IOC容器里.但是,请大家考虑 ...

  8. 深入理解 SpringBoot 启动机制(starter 机制)

    一.前言 使用过springboot的同学应该已经知道,springboot通过默认配置了很多框架的使用方式帮我们大大简化了项目初始搭建以及开发过程.本文的目的就是一步步分析springboot的启动 ...

  9. 深度理解springboot集成cache缓存之源码解析

    一.案例准备 1.创建数据表(employee表) 2.创建Employee实体类封装数据库中的数据 @AllArgsConstructor @NoArgsConstructor @Data @ToS ...

最新文章

  1. sql server mvp 發糞塗牆
  2. 三点弯曲弹性模量怎么计算公式_拉力试验机常用力学计算公式
  3. GCC选项_-Wl,-soname
  4. [物理学与PDEs]第1章第6节 电磁场的标势与矢势 6.3 例 --- 电偶极辐射
  5. noip2011——普及组——瑞士轮
  6. OneDrive网盘资源下载教程
  7. 人脸对齐--采用dlib库的68_face_landmark进行人脸对齐操作
  8. Python 整型、浮点型、字符串型、布尔型转换,基础运算符
  9. 人生经典定律[收藏]
  10. 由手机号绑定的账号,都应设置更换手机号功能
  11. 6-1 判断顺序表是否有序(Java语言描述 )
  12. win7计算机广告更改,Win7电脑如何找到带来弹窗广告的软件【图文教程】
  13. c语言课程设计之简易计算器,简易计算器课程设计 帮忙写简单计算器课程设计...
  14. 模电知识体系总结-1.1半导体基础器件
  15. 1003 Emergency (25 point(s))
  16. 10月25日 c语言 打印所有水仙花数
  17. 程序员自学编程,推荐一些高质量自学网站?
  18. json后台的一些处理方式
  19. 虹膜识别—DeepIrisNet2
  20. 计算机组成原理时序与启停实验,计算机组成原理时序与启停实验.doc

热门文章

  1. html中的rel,rev是什么?
  2. Microsoft Azure 简介及信息汇总
  3. VMware虚拟机三种网络模式的区别
  4. 配置Apache虚拟机
  5. 解决Eclipse java build path中Web App Libraries无法自动找到WEB-INF的lib目录
  6. 《SaaS架构设计》试读:前 言
  7. 在IOC中装配Bean
  8. 页面无法访问 css文件加载问题
  9. wordpress通过$wpdp更新数据表内容
  10. WinCE的开发流程