1.配置文件
1.1配置文件的作用
配置文件可以解决软件硬编码的问题,可以实现个性化。把所有需要改变的信息集中到一个地方。,当我们启动某个程序时,从配置文件中读取数据,并加载运行。
1.2配置文件的格式
- application.properties
- application.yml(yml是yaml的简写,使用方式是一样的)
- application.yaml
在程序启动时,spring boot会自动从classpath路径中查找上面上个文件
注意:
- .properties和.yml可以并处于同一个项目,如果同时对同一个东西进行配置,以properties为主
- 不过实际业务中,只会采用一种文件配置格式,可以降低故障率更好的维护
1.3读取配置文件
在项目中使用@Value注解来实现。
我们在读取对象时不是我们写什么类型就是什么类型,而是更具后面提取的类型来进行改变。
properties基本语法“key=value”
缺点:前面重复度高,有很多冗余的信息
#配置端口号
sever.port = 8080
#配置数据库链接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
#自定义配置
demo.key1 = hello,properties
读取
@RestController
public class PropertiesController {
// 读取路由
@Value("${demo.key1}")
private String key1;
public String readKey(){
return "读取到的配置项key1:"+key1;
}
}
yml是以树形结构配置文件,基本语法“key: value”
注意:
- key和value之间是:+空格,空格不可以省
- 在properties中的.用:+换行标识
- 如果配置中有字符串,默认不加单引号或双引号
- 加单引号会转义特殊字符,使他们无法转义
- 加双引号不会转义就表示他的特殊含义
sever:
port: 8080
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8&useSSL=false
username: root
password: root
@RestController
public class YmlController {
@Value("${demo.key2}")
private String key2;
public String readKey2(){
return "读取到的配置:"+key2;
}
}
1.3.1yml配置不同类型的数据及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:''
1.3.2配置对象,集合,map
在配置文件中,填写student的数据
student:
id: 1
nane: ming
age: 18
创建一个学生类
通过这个关键字,来获取配置中的数据
@ConfigurationProperties(prefix = "student")
把这类交个loc来管理
@Component
使用lombok来简化代码
@Data
public class Student {
private Integer id;
private String name;
private Integer age;
}
1.3.3yml的优缺点
优点
- 可读性高,写法简单,易于理解
- 支持数据类型,表达对象,数组,list,map等形态
- 支持更多的编程语言
缺点
- 不适合写复杂的配置文件
- 对格式要求比较高
2日志
2.1日志的用途
- 系统监测,监测系统的运行状态,以及出现异常的警报
- 数据采集,进行统计分析,优化公司策略,个性化推荐
- 日志审计,判断统计一些非法攻击,来处理过程中的安全隐患
2.2打印日志
System.out.println("打印日志"); //该打印方式不能看到日志的基本信息 private static Logger logger = LoggerFactory.getLogger(LoggerController.class); @PostConstruct public void print(){ logger.info("==========这是日志框架打印的日志============"); } //该方式则可看到基本信息
2.3门面模式(外观模式)
提供了一个统一的接口,来访问子系统的一群接口
门面模式的优点
- 减少了系统的相互依赖,实现了客户端和子系统的耦合关系,这使得子系统的变化不会影响到客户端
- 提高了灵活性,简化了使用难度,只需要和门对象交互就可以
- 提高了安全性,可以灵活的设定访问权限,不在门对象中开通方法,就无法访问
如果我们不引入日志门面
- 不同日志框架的api接口和配置文件不同,维护起来成本高
- 如果更换日志框架,应用程序将不得不修改代码,并且会存在一些冲突
2.4日志级别
从高到低,此处的等级分类和测试中的无关
- FATAL:致命错误,表示需要立即被处理的系统错误
- ERROR:错误信息,级别较高,但不会系统继续运行
- WARN:警告信息,不影响使用,但是要注意
- INFO:普通信息,用于记录应用程序正常运行时的一些信息
- DEBUG:调试信息,需要调试时候的关键信息
- TRACE:追踪信息,比DEBUG更细粒度的信息事件