关于Profile配置
Spring Boot框架很好的支持了Profile配置,它允许在项目中同时存在若干个配置文件,这些配置文件默认并不会被激活(被应用),你可以选择激活其中的某1个或多个。
在基于Spring Boot框架的项目中,application.properties是主配置文件,是始终被激活的,application-自定义名称.properties是Profile配置文件,需要被激活才会被应用的,例如:
在
application.properties中,可以通过spring.profiles.active属性来激活某1个或多个Profile配置,此属性的值就是Profile配置文件的文件名中自定义的部分,例如:
当同时被应用的多个配置文件中存在相同的属性,但配置值不同时:
- Profile配置文件中的配置值优先级高于主配置文件中的配置值
- 如果激活的多个Profile配置中的配置值冲突,按照激活顺序,后激活的配置优先级更高,例如激活为
spring.profiles.active=test, dev,冲突时,以dev对应的配置为准
关于YAML配置
YAML是一种编写配置文件的语法,此类配置的文件的扩展名是.yml或.yaml,在开发实践中,不与.properties同时使用。
相比.properties配置文件,YAML语法的特征:
- 属性名中原本使用小数点分隔的,改为使用冒号和换行并空2格来表示,并且,每换行一次,增加2个空格
- 多个属性名中相同的部分不需要写,只需要保证同样的缩进即可
- 属性名与属性值之间使用1个冒号和1个空格进行分隔
例如:
spring.datasource.username=root
spring.datasource.password=P@assw0rd
则改为:
spring:
datasource:
username: root
password: P@ssw0rd
其实,Spring系列框架并不支持YAML语法的配置文件,需要添加snakeymal工具包,在Spring Boot的基础依赖项中,已经包含此工具包,所以,在基于Spring Boot框架的项目中可以支持。
另外,在YAML中也支持使用小数点分隔属性名中的各部分。
**注意:**在分隔属性名的各部分时,换行后必须缩进2个空格,不可以是其它缩进方式!但是,在使用IntelliJ IDEA编写.yml文件的代码时,会自动将按下的TAB转换成2个空格!
**注意:**YAML文件对语法要求是严格的,且敏感的,如果语法错误,将无法解析此类文件,在开发实践中,如果语法错误不明显,可以尝试全部删除并重写配置代码!
使用YAML配置时,也支持Profile配置,规则完全相同。
关于SLF4j日志框架
在开发实践中,不允许使用System.out.println()或类似的输出语句!主要原因在于:
- 输出效率低下
- 在开发过程中输出的某些信息,不适合在测试环境或生产环境中被显示
推荐使用日志框架来输出各种信息,SLF4j是目前主流的日志框架,在Spring Boot的基础依赖项中已经包含相关的包。
当添加了Lombok依赖项后,可以在任何类上添加@Slf4j注解,则Lombok会在编译期自动声明名为log的变量,在类中,可以通过此变量调用方法来输出日志,例如:
@Slf4j
public class Slf4jTests {
@Test
void test() {
log.info("这是一条日志!");
}
}
在SLF4j中,根据日志信息的重要程度,从低到高,依次有5个级别:
-
trace:跟踪信息- 通常,希望仅开发人员可见
-
debug:调试信息- 通常,希望开发人员、测试人员可见
-
info:一般信息- 通常,不介意任何人可见
-
warn:警告信息- 通常,希望引起注意,但程序仍可运行
-
error:错误信息- 通常,需要重视,程序可能可以运行,可能存在隐患,但也可能是正常的
以上各级别都有对应的方法,所以,在使用SLF4j时,调用不同方法,就可以输出不同级别的日志,例如:
@Slf4j
public class Slf4jTests {
@Test
void test() {
log.trace("这是一条【TRACE】日志!");
log.debug("这是一条【DEBUG】日志!");
log.info("这是一条【INFO】日志!");
log.warn("这是一条【WARN】日志!");
log.error("这是一条【ERROR】日志!");
}
}
日志的显示级别是可控制的,当配置为某个显示级别时,只会显示此级别及更重要级别的日志!
在没有加载Spring Boot环境的情况下,SLF4j的默认显示级别是debug,所以,默认情况下,只会显示debug及更重要级别的日志,而trace不会被显示!
在加载Spring Boot环境的情况下,SLF4j的默认显示级别是info。
在配置文件中,可以通过logging.level.根包名[.类名]属性来配置日志的显示级别,此属性的值就是你需要显示的日志的级别。
提示:以上属性名中,中括号框住的部分是可选的。
例如,配置为:
logging:
level:
cn.tedu.csmall: trace
提示:以上信息应该配置在各Profile配置文件中。
在SLF4j的API中,各显示级别的日志都有(String message, Object... args)参数列表的方法,在此方法中,第1个参数String message表示需要通过日志输出的信息,并且,在此信息中,如果需要输出某个或某些变量的值,可以使用{}进行占位,然后,通过第2个参数Object... args表示各占位符对应的值,例如:
int x = 1;
int y = 2;
System.out.println("x = " + x + ", y = " + y + ", x + y = " + (x + y));
log.debug("x = {}, y = {}, x + y = {}", x, y, x + y);
其实,SLF4j只是一个日志框架的标准,具体的日志相关功能并不是由它实现的,常见的实现了日志相关功能的日志框架有:log4j、logback等,SLF4j提供了这些日志框架向SLF4j标准的转换。