目录
一.SpringBoot
1.介绍SpringBoot
2.SpringBoot优点
二.创建SpringBoot工程
三.SpringBoot的配置文件
1.properties配置文件
1.properties配置文件格式
2.取配置文件的信息
3.properties配置文件的优缺点
2.yml配置文件
1.yml配置文件格式
2.取配置文件的信息
3.yml配置文件的优缺点
3.yml配置文件配置不同数据类型
1.配置不同数据类型及 null
2.配置对象
3.配置list集合
4.配置map集合
4.多平台配置文件
四.SpringBoot的日志
1.常见日志框架
2.自定义日志
3.日志的级别
1.日志的级别
2.日志级别的顺序
3.分目录打印
4.日志持久化
1.配置日志保存的地址
2.配置分割日志
3.配置日志文件的文件名
5.Lombok结合日志
6.Lombok其他用处
1.基本注解
2.组合注解
3.日志注解
选择 SpringBoot2的版本,加入Lombok和SpringWeb依赖
简单的一个程序
package com.javastudy.springboot3.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Chooker
* @create 2023-07-23 17:16
*/
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello,SpringBoot";
}
}
输入:http://127.0.0.1:8080/hello 即可访问
约定大于配置
在Spring项目中我们需要配置扫描路径,但在SpringBoot项目中,有默认的包扫描路径,为SpringBoot启动类的所在的路径及其子路径
有两种类型的配置文件,同时存在都生效
# 配置项⽬端⼝号
server.port=8084
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=
utf8
spring.datasource.username=root
spring.datasource.password=root
@Component
public class ReadYml {
@Value("${server.port}")
private String port;
@PostConstruct
public void postConstruct() {
System.out.println("Read YML,port:" + port);
}
}
server:
port: 8080
spring:
#当前的阶段,dev是开发阶段,test是测试阶段,prod是发布阶段
profiles:
active: dev
datasource:
url: jdbc:mysql://localhost:13306/blog_db?characterEncoding=utf8&useSSL=false
username: root
password: woaini520
每一层要在左对齐,并且冒号后面一定要于要有空格
和上面的一样
注意:如果没有设置好编码的格式,可能yml文件的中文注解会出现乱码的现象,而且是不可逆的
因此当打开或者创建一个spring项目的时候,我们首先要设置好File Encodings(如下图所示)
# 字符串
string.value: Hello
# 布尔值,true或false
boolean.value: true
boolean.value1: false
# 整数
int.value: 10
int.value1: 0b1010_0111_0100_1010_1110 # ⼆进制
# 浮点数
float.value: 3.14159
float.value1: 314159e-5 # 科学计数法
# Null,~代表null
null.value: ~
单双引号的区别
string:
str1: Hello \n Spring Boot.
str2: 'Hello \n Spring Boot.'
str3: "Hello \n Spring Boot."
student:
id: 1
name: Java
age: 18
或者是行内写法
student: {id: 1,name: Java,age: 18}
@Data
@ConfigurationProperties(prefix = "student")
@Component
public class Student {
private Integer id;
private String name;
private Integer age;
}
@Component
@Slf4j
public class ReadYml2 {
@Autowired
private Student student;
@PostConstruct
public void postConstruct() {
log.info(student.toString());
}
}
dbtypes:
name:
- mysql
- sqlserver
- db2
或者是行内写法
dbtypes: {name: [mysql,sqlserver,db2]}
map2:
key1: value1
key2: value2
key3: value3
在不同的阶段,配置文件的内容不一样,比如一个软件的开发通常包括:开发,测试,预发布和发布阶段,每一个阶段不同的人员参与研发,他们的数据库等一些的信息可能不同,因此我们就需要不同的配置文件来对应不同阶段的配置文件的信息
在application.yml文件中配置当前的环境(此时配置的就是开发环境,默认读取application-dev.yml)
spring:
#当前的阶段,dev是开发阶段,test是测试阶段,prod是发布阶段
profiles:
active: dev
注意:如果同时两种类型的配置文件同时存在,都生效,如果这两个文件有冲突项,以properties文件为主,通常只存在一种.
SpringBoot中内置了日志框架,在启动springboot项目的时候可以看到有如下格式的打印的日志信息
日志门面可以类比为JDBC,日志实现可以类比为mysql,oracle等数据库通过slf4j或者commons-logging可以调用日志,从而完成日志功能
我们可以通过private Logger logger = LoggerFactory.getLogger(LogController.class)来获取日志对象,从而来打印日志信息
package com.javastudy.springboot3.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.PostConstruct;
/**
* @author Chooker
* @create 2023-07-24 12:32
*/
@RestController
public class LogController {
private Logger logger = LoggerFactory.getLogger(LogController.class);
@PostConstruct
public void postConstruct(){
logger.info("第一条日志信息");
}
}
日志级别为:
@PostConstruct
public void postConstruct(){
logger.trace("trace日志信息....");
logger.debug("debug...");
logger.info("info...");
logger.warn("warn....");
logger.error("error...");
}
打印的日志信息:
可以观察到上面两个日志信息没有打印出来,为什么会这样呢?接下来日志级别来说明
日志级别的顺序:
SpringBoot的默认日志级别为info,低于info级别的信息不打印
我们可以通过配置文件对日志级别进行修改
logging:
level:
root: warn
可以观察到只打印了warn和error级别的日志信息
设置其他目录打印的级别为info,com.javastudy.springboot3.controller目录下面的信息打印的默认日志级别为debug
logging:
level:
root: info
com:
javastudy:
springboot3:
controller: debug
logging:
file:
path: D:\java cave\Loggings
日志文件信息:两次不同的时间点启动springboot程序,可以看到两次日志的信息(是追加添加的)
日志超过1KB就进行分割,分割后日志的名字为 file-name-pattern的形式
logging:
file:
path: D:\java cave\Loggings\
level:
root: info
com:
javastudy:
springboot3:
controller: debug
logback:
rollingpolicy:
max-file-size: 1KB
file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i
# 设置⽇志⽂件的⽂件名
logging:
file:
name: springboot.log
文件默认保存当当前目录的下面
可以这样设置进行保存到特定的目录下面
logging:
file:
name: D:\java cave\Loggings\springboot.log
添加lombok依赖
org.projectlombok
lombok
1.18.20
true
在需要日志信息输出的类上面加@Slf4j注解,即可直接使用log对象
package com.javastudy.springboot3.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.PostConstruct;
/**
* @author Chooker
* @create 2023-07-24 12:32
*/
@RestController
@Slf4j
public class LogController2 {
@PostConstruct
public void postConstruct(){
log.trace("trace日志信息....");
log.debug("debug...");
log.info("info...");
log.warn("warn....");
log.error("error...");
}
}
观察.class文件我们可以知道底层原理其实就是和之前是一样的
Java程序运行原理
Lombok 的作用如下图所示:
注解 | 作用 |
@Getter | 自动添加 getter 方法 |
@Setter | 自动添加 setter 方法 |
@ToString | 自动添加 toString 方法 |
@EqualsAndHashCode | 自动添加 equals 和 hashCode 方法 |
@NoArgsConstructor | 自动添加无参构造方法 |
@AllArgsConstructor | 自动添加全属性构造方法,顺序按照属性的定义顺序 |
@NonNull | 属性不能为 null |
@RequiredArgsConstructor | 自动添加必需属性的构造方法,final +@NonNull 的属性为必需 |
@Getter和@Setter注解加在属性上面,给特定的属性加getter和setter方法,加在类上面给所有的属性加getter和setter方法
注解 | 作用 |
@Data | @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor + @NoArgsConstructor |
注解 | 作用 |
@Slf4j
|
添加一个名为 log 的日志,使用 slf4j
|