目录
Spring Book 配置文件
一. 配置文件
1.配置文件的作用
2.配置文件的格式
二. .properties配置文件
1. .properties配置文件说明
2.读取配置文件
三.yml配置文件
1. .yml配置文件说明
2.使⽤ yml 连接数据库
3.yml 配置不同数据类型及 null
4.yml配置读取
5.主要事项:value值加单双引号
6.配置对象
7.配置集合
8.配置Map
四.配置文件总结:
1.配置的转换:
2.单双引号的区别
3.对应关系:
4.yml优缺点:
Spring Book 日志
一.日志的作用
二.日志的使用
1.使用日志对象打印日志
2.日志框架
2.1⻔⾯模式(外观模式)
3. SLF4J框架
3.1日志的级别:
3.2日志级别的使用:
3.3配置⽇志级别
3.4配置日志文件名
3.5配置日志的存储目录
3.6配置⽇志⽂件分割
三.更简单的日志输出
添加 lombok 依赖
输出⽇志
总结:
Spring Book 配置文件
一. 配置文件
1.配置文件的作用
配置文件主要为了解决硬编码带来的问题,把可能会发生改变的信息,放在一个集中的地方,当我们启动某个程序时,应用程序从配置文件中读取数据,并加载运行。
使用配置文件,可以使程序完成用户和应用程序的交互,或者应用程序与其他程序的交互
2.配置文件的格式
Spring Book配置文件共有三种:
- application.properties
- application.yml
- application.yaml
当应⽤程序启动时, Spring Boot会⾃动从classpath路径找到并加载application.properties 和 application.yaml 或者 application.yml ⽂件
说明:
- .properties文件和.yml文件是可以共存在同一个项目中的,当配置文件内容有冲突时,则以 .properties文件为主, .properties文件优先级更高
- 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取⼀种 统⼀的配置⽂件格式,这样可以更好的维护(降低故障率)
二. .properties配置文件
1. .properties配置文件说明
.properties是创建Spring Book项目 默认的配置文件
# 配置项⽬端⼝号server.port=8080#配置数据库连接信息spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=falsespring.datasource.username=rootspring.datasource.password=123456
配置文件使用 "#" 来添加注解信息
2.读取配置文件
myKey = bb
myKey.key1 = aa
@RestController
public class PropertiesController {
//使用value("${}") 从配置文件中获取自定义信息 赋值给变量key1@Value("${mykey.key1}")private String key1;@Value("${mykey}")private String key;@RequestMapping("/key1")public String key1(){return "读取到值:"+key1;}@RequestMapping("/key")public String key(){return "读取到值:"+key;}
}
三.yml配置文件
1. .yml配置文件说明
//正确的代码格式
myKey: bb
myKey.key1: aa//错误的代码格式
mykey:a
2.使⽤ yml 连接数据库
#数据库连接配置
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=falseusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Drivermybatis:# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件mapper-locations: classpath:mybatis/**Mapper.xml# 配置打印 MyBatis日志configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: true #配置驼峰⾃动转换
3.yml 配置不同数据类型及 null
# 字符串
string.value: Hello# 布尔值,true或false
boolean.value: true
boolean.value1: false# 整数
int.value: 10# 浮点数
float.value: 3.14159# Null,~代表null
null.value: ~# "" 空字符串
#, 直接后⾯什么都不加就可以了, 但这种⽅式不直观, 更多的表⽰是使⽤引号括起来
empty.value: ''
4.yml配置读取
string:hello: n
@RestController
public class Controller {@Value("${string.hello}")private String hello;@RequestMapping("/hello")public String Hello(){return "获取yml配置:"+hello;}}
5.主要事项:value值加单双引号
string:str1: Hello \n Spring Boot.str2: 'Hello \n Spring Boot.'str3: "Hello \n Spring Boot."
@RestController
public class Controller {@Value("${string.str2}")private String str2;@Value("${string.str3}")private String str3;@RequestMapping("/yml")public String readYml(){System.out.println(str1);System.out.println(str2);System.out.println(str3);return "yml";}
}
//执行结果:
// Hello \n SpringBoot.
// Hello \n SpringBoot.
// Hello
// SpringBoot.
- 字符串默认不⽤加上单引号或者双引号。
- 单引号会转义特殊字符,使其失去特殊功能, 始终是⼀个普通的字符串.
- 双引号不会转义字符串⾥⾯的特殊字符, 特殊字符会表⽰本⾝的含义.
此处的转义理解起来会有些拗⼝, \n 本意表⽰的是换⾏使⽤单引号会转义, 就是说, \n 不再表⽰换⾏了, ⽽是表⽰⼀个普通的字符串使⽤双引号不会转义, 表⽰ \n 表⽰的是它本⾝的含义, 就是换⾏
6.配置对象
.yml中配置对象,如下格式:
# 配置对象 student:name: lisiid: 18age: 20
注意" : "后面加空格
这个时候就不能⽤ @Value 来读取配置中的对象了,此时要使⽤另⼀个注解@ConfigurationProperties 来读取,具体实现如下:
package com.example.springiocdemo.entity;import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationPropertiesScan; import org.springframework.stereotype.Component; import org.springframework.stereotype.Controller;@ConfigurationProperties("student") @Component @Data public class Student {private String name;private Integer id;private Integer age;}
调用类如下:
@RequestMapping("yml")
@RestController
public class Readymlcontroller {@Autowiredprivate Student student;@RequestMapping("readStudent")public String readStudent(){return "从yml中获取配置文件Student:"+student;}
}
7.配置集合
配置list集合,如下所⽰:
dbtypes:name:- mysql- sqlserver- db2
集合的读取和对象一样,使用@ConfigurationProperties 来读取的
@Component
@ConfigurationProperties(prefix = "dbtypes")
@Data
public class ListConfig {private List<String> name;
}
8.配置Map
# 配置Mapmap:k1: kk1k2: kk2k3: kk3
map的读取和对象一样,使用@ConfigurationProperties 来读取的
@Component
@ConfigurationProperties(prefix = "maptypes")
@Data
public class MapConfig {private HashMap<String,String> map;
}
四.配置文件总结:
1.配置的转换:
2.单双引号的区别
3.对应关系:
4.yml优缺点:
优点:
- 可读性高,写法简单,易于理解
- 支持更多的数据类型,可以简单表达对象,数组,list,Map,的数据形态
- 支持更多的编程语言,不只是java中可以使用,在Golang,Python,JavaScript也可以使用
缺点:
- 不适合写复杂的配置⽂件
- 对格式有较强的要求(可能一个空格导致整个项目垮掉)
Spring Book 日志
一.日志的作用
- 系统监控
- 数据采集
- 日志审计
二.日志的使用
Spring Book项目 在启动的时候默认就有日志输出,如图所示:
System.out.print 打印的⽇志, ⽐ SpringBoot 打印的⽇志缺少了很多信息.SpringBoot 内置了⽇志框架 Slf4j , 我们可以直接在程序中调⽤ Slf4j 来输出⽇志
1.使用日志对象打印日志
@RequestMapping("Logger")
@RestController
public class LoggerController {private static Logger logger = LoggerFactory.getLogger(LoggerController.class);@RequestMapping("/getLogger")public String logger(){logger.info("--------------要输出⽇志的内容----------------");return "打印⽇志";}
}
打印日志结果:
2.日志框架
SLF4J不同于其他⽇志框架, 它不是⼀个真正的⽇志实现, ⽽是⼀个抽象层, 对⽇志框架制定的⼀种规范,标准, 接⼝. 所有SLF4J并不能独⽴使⽤, 需要和具体的⽇志框架配合使⽤
2.1⻔⾯模式(外观模式)
⽐如去医院看病,可能要去挂号, ⻔诊, 化验, 取药, 让患者或患者家属觉得很复杂, 如果有提供接待⼈员, 只让接待⼈员来处理, 就很⽅便.
- 减少了系统的相互依赖. 实现了客⼾端与⼦系统的耦合关系, 这使得⼦系统的变化不会影响到调⽤它 的客⼾端; •
- 提⾼了灵活性, 简化了客⼾端对⼦系统的使⽤难度, 客⼾端⽆需关⼼⼦系统的具体实现⽅式, ⽽只需 要和⻔⾯对象交互即可.
- 提⾼了安全性. 可以灵活设定访问权限, 不在⻔⾯对象中开通⽅法, 就⽆法访问
3. SLF4J框架
从上图可以看到,⽇志输出内容元素具体如下:
- 时间⽇期:精确到毫秒
- ⽇志级别:ERROR, WARN, INFO, DEBUG 或TRACE
- 进程ID
- 线程名
- Logger名(通常使⽤源代码的类名)
- 日志内容
3.1日志的级别:
⽇志的级别从⾼到低依次为: FATAL、ERROR、WARN、INFO、DEBUG、TRACE
FATAL: 致命信息,表⽰需要⽴即被处理的系统级错误.ERROR: 错误信息, 级别较⾼的错误⽇志信息, 但仍然不影响系统的继续运⾏.WARN: 警告信息, 不影响使⽤, 但需要注意的问题INFO: 普通信息, ⽤于记录应⽤程序正常运⾏时的⼀些信息, 例如系统启动完成、请求处理完成等.DEBUG: 调试信息, 需要调试时候的关键信息打印.TRACE: 追踪信息, ⽐DEBUG更细粒度的信息事件(除⾮有特殊⽤意,否则请使⽤DEBUG级别替代)
3.2日志级别的使用:
@RequestMapping("/printLog")
public String printLog() {logger.trace("================= trace ===============");logger.debug("================= debug ===============");logger.info("================= info ===============");logger.warn("================= warn ===============");logger.error("================= error ===============");return "打印不同级别的⽇志" ;
}
⽇志的输出级别默认是 info级别, 所以只会打印⼤于等于此级别的⽇志, 也就是info, warn和error.
3.3配置⽇志级别
⽇志级别配置只需要在配置⽂件中设置"logging.level"配置项即可,如下所⽰:
logging:level:root: debug
3.4配置日志文件名
# 设置⽇志⽂件的⽂件名 logging:file:name: logger/springboot.log
3.5配置日志的存储目录
# 设置⽇志⽂件的⽬录 logging:file:path: D:/temp
注意:logging.file.name 和 logging.file.path 两个都配置的情况下, 只⽣效其⼀, 以logging.file.name 为准.
3.6配置⽇志⽂件分割
logging:logback:rollingpolicy:max-file-size: 1KBfile-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i
三.更简单的日志输出
- 添加lombok框架支持
- 使用 @slf4j 注解输出日志
添加 lombok 依赖
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
输出⽇志
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;//引入 @Slf4j注解
@Slf4j
@RestController
public class LogController {public void log(){//lombok提供的 @Slf4j 会帮我们提供⼀个⽇志对象 log, 我们直接使⽤就可以log.info("--------------要输出⽇志的内容----------------");}
}
总结:
- ⽇志是程序中的重要组成部分,使⽤⽇志可以快速的发现和定位问题,Spring Boot 内容了⽇志框架,默认情况下使⽤的是 info ⽇志级别将⽇志输出到控制台的,我们可以通过 lombok 提供的 @Slf4j 注解和 log 对象快速的打印⾃定义⽇志.
- ⽇志包含 6 个级别, ⽇志级别越⾼,收到的⽇志信息也就越少,我们可以通过配置⽇志的保存名称 或保存⽬录来将⽇志持久化