深入理解SpringBoot(2)

这一章接上面的深入理解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());
    @Test
    void 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值