目录
Spring中配置文件有很重要的地位,所有的总要数据都是在配置文件中配置的。
比如数据库的信息、项目使用的端口号、日志等等。
Spring Boot配置文件主要分为以下两种格式:
.properties 和 .yml
- 当properties和yml一起存在一个项目中,并且出现了同样的配置,比如serve人.port这个配置,这个时候会以properties中的配置为主,也就是优先级高于.yml。但加载完properties后仍然会加载yml文件。
- 实际来说,并不会出现两种配置文件共存的情况,只出现一种配置文件有利于维护。
properties是古老的配置文件,也是创建Spring Boot 项目默认的配置文件。
properties是以键值对的形式来配置的,key和value之间以 = 连接。并且可以使用#来添加注释。
在项目中想要主动读取配置文件的内容,可以使用@Value注释来实现。
使用? ${}? 的格式读取,并且在Construct后面打印出来
properties是以key-value的形式配置的。
但是这样就会出现很多的冗余信息
这个时候我们就可以使用yml的配置文件了。
yml是YAML的 缩写,全称是 Yet Another Markup Language 翻译成中文就是“另?种标记语言”。
yml是树形结构的配置文件,它的基础语法是? key: value。注意key和value之间使用英文冒号加空格的方式组成的,其中的空格不能省略。
yml配置读取的方式和properties相同,使用@Value注解即可。
字符串默认不用加引号,但是加英文的单引号和双引号可以表示特殊的含义。
双引号不会转义字符串里面的特殊字符,特殊字符会作为本身想要表达的意思。
我们还可以在yml中配置对象:
或者使用行内写法:????????
这个时候就不能使用@Value来读取配置中的对象了,而是要使用ConfigurationProperties来读取:
要注意,从配置文件中获取到student对象,需要在相关的类中定义Getter和Setter方法。
- properties以key=value的方式配置,而yml使用类似于json格式的树形配置方法配置的。
- yml可以很好的解决数据冗余的问题
- yml通用型非常好,并且支持更多的数据类型
在Spring Boot中,我们需要日志。
- 记录错误日志和警告日志:比如排查错误、bug
- 用户日志:可以记录用户登录日志,方便分析用户是正常登录还是恶意访问的用户
- 系统日志:记录系统的操作日志,方便数据的恢复和定位操作人员
- 程序执行日志:记录程序的执行时间
Spring Boot项目在启动的时候就默认有日志输出:
在程序中获取日志对象需要使用日志工厂LoggerFactory:
可以看到我们打印了五个日志,但是只显示出来了三个。这就要提到日志级别了。
日志级别可以帮助我们实现不同环境下的日志打印需求,如开发环境我们就需要很详细的信息,而生产环境为了保证性能和安全就需要输入尽量少的日志。
- trace:微量,少许的意思,级别最低;
- debug:需要调试时候的关键信息打印;
- info:普通的打印信息(默认日志级别);
- warn:警告,不影响使用,但需要注意的问题;
- error:错误信息,级别较高的错误日志信息;
- fatal:致命的,因为代码异常导致程序退出执行的事件。
Spring Boot默认的级别是info,日志级别比info高的才显示出来。越往上关于日志的消息就收到的越多。
并且我们可以设置日志级别,以yml配置文件为例:
此时全局的日志只有error级别的才会显示,所以之前的日志都没显示。自定义在TestController的日志更改为了trace级别,也就是只要比trace级别高的日志就会显示出来。
并且也可以用info来自定义日志内容。
以上的内容都是输出在控制台上,生产环境上我们需要将日志保存到本地或者数据库中。
想要将日志持久化保存,只需要在配置文件中指定日志的存储目录或者指定保存名称后,日志就会自动保存。也就是说不配置就不会保存,配置好了就默认保存。
之前我们已经简单的介绍了Lombok,这次我们详细的说明一下。
首先是对日志的快捷添加,使用 @Slf4j 注释来快速添加日志工厂的元素。
使用这一个注解就可以代替之前的LoggerFactory.getLogger这样繁琐的操作了。
但是使用注解时,只能使用log对象才能输出,这是lombok提供的对象名。
之前介绍过JVM,里面详细解释到:用户代码(.java)通过编译成字节码(.class)再通过JVM运行,Lombok直接介入到编码的过程,生成的字节码文件是被修改过的。
也就是说,拿到了Lombok修改过的.class文件,和用户自己添加的未经过简化的代码编译后是一致的。
基本注解:
- @Getter 自动添加 getter 方法
- @Setter 自动添加 setter 方法
- @ToString 自动添加 toString 方法
- @EqualsAndHashCode 自动添加 equals 和 hashCode 方法
- @NoArgsConstructor 自动添加无参构造方法
- @AllArgsConstructor 自动添加全属性构造方法,顺序按照属性的定义顺序
- @NonNull 属性不能为 null
- @RequiredArgsConstructor 自动添加必需属性的构造方法,final + @NonNull 的 属性为必需
组合注解:
- @Data? 作用为@Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor + @NoArgsConstructor
日志注解:
- @Slf4j? 添加一个名为log的日志