深入理解SpringBoot(2)

mac2026-10-01  5

这一章接上面的深入理解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:

将系统中其他的日志框架先排除出去用中间包替换原来的日志框架我们导入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)