目录
2.2、使用日志对象来打印日志(使用日志对象提供的内置方法打印)
什么是SpringBoot
Spring Boot是一种全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
SpringBoot的优点
1、快速集成框架,Spring Boot提供了启动添加依赖的功能,用于秒级集成各种框架;
2、内置运行容器,无需配置Tomcat等 Web容器,直接运行和部署程序;
3、快速部署项目,无需外部容器即可启动并运行项目;
4、可以完全抛弃繁琐的XML,使用注解和配置的方式进行开发;
5、支持更多的监控的指标,可以更好的了解项目的运行情况。
SpringBoot项目的创建
1、使用idea创建
如果使用的是idea社区版,则需要安装Spring Boot Helper插件
2、项目目录介绍和运行
Spring Boot目录介绍
一个简单的Spring Boot代码实现:
@Controller //控制器
@ResponseBody //返回的是数据,而非页面
public class TestController {
@RequestMapping("/hi") //url路由注册
public String sayHi(String name){
//为空为null,默认值处理
if (!StringUtils.hasLength(name)){
name="baekhyun";
}
return "你好:"+name;
}
}
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
运行时,先找到Spring Boot启动类(@SpringBootApplication),运行启动类中的main方法
然后在网页*问localhost:8080/hihttp://localhost:8080/hi
Spring Boot配置文件
1、配置文件
1.1、系统使用的配置文件(系统配置文件),如端口号的设置、连接数据库的配置
1.2、用户自定义配置文件
2、配置文件的格式
2.1、properies
server.port=8888
2.2、yml
server:
port: 8888
说明:
1、当一个项目中存在两种格式的配置文件,并且两个配置文件中设置了相同的配置项,但值不同时,那么properties的优先级更高
2、通常情况下一个项目中只会存在一种格式的配置文件
3、properties
3.1、properties基本语法
是以键值的形式配置的,key=value
#端口号设置
server.port=8888 #系统设置
myname=baekhyun #自定义
3.2、读取配置文件
使用@Value读
@Value("${myname}")
private String myname;
@RequestMapping("/getconfig")
public String getConfig(){
return myname;
#端口号设置
server.port=8888 #系统设置
myname=边伯贤 #自定义
3.3、缺点
配置文件中会有很多冗余的信息
#连接数据库配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
4、yml
4.1、优点
yml是一个可读性高,写法简单、易于理解,它的语法和JSON语言类似;yml支持更多的数据类型,它可以简单表达清单(数组)、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等;yml支持更多的编程语言,它不止是Java中可以使用在Golang、PHP、Python、Ruby、JavaScript、Perl中。
4.2、yml基本语法
key: value(value前面有一个空格)
server:
port: 6666
#自定义配置项
myname2: baekhyun
配置数据库连接
#配置数据库连接
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
username: root
password: root
4.3、yml配置数据类型
转义字符
#字符串
myString: 你好,\n伯贤
myString1: '你好,\n伯贤'
myString2: "你好,\n伯贤"
@Value("${myString}")
private String myString;
@Value("${myString1}")
private String myString1;
@Value("${myString2}")
private String myString2;
@PostConstruct
public void postConstruct(){
System.out.println("myString"+myString);
System.out.println("myString1"+myString1);
System.out.println("myString2"+myString2);
}
4.4、yml配置对象
使用@ConfigurationProperties读取对象
#自定义对象
star:
id: 04
name: d.o.
age: 29
@Component
@ConfigurationProperties("star")
@Data
public class Star {
private int id;
private String name;
private int age;
}
@Autowired
private Star star;
@PostConstruct
public void postConstruct(){
System.out.println(star);
}
5、properties和yml
5.1、properties是以key=value 的形式配置的键值类型的配置文件,而yml使用的是类似json格式的树形配置方式进行配置的,yml层级之间使用换行缩进的方式配置,key和value 之间使用“:”英文冒号加空格的方式设置,并且空格不可省略;
5.2、properties为早期并且默认的配置文件格式,但其配置存在一定的冗余数据,使用yml可以很好的解决数据冗余的问题;
5.3、yml通用性更好,支持更多语言;
5.4、yml支持更多的数据类型。
6、设置不同环境的配置文件
SpringBoot日志文件
1、日志的功能
1.1、发现和定位问题;
1.2、记录用户登录日志,方便分析用户是正常登录还是恶意破解用户;
1.3、记录系统的操作日志,方便数据恢复和定位操作;
1.4、记录程序的运行时间,方便为以后优化程序提供数据支持
2、SpringBoot使用日志
2.1、先得到日志对象
private static final Logger logger= LoggerFactory.getLogger(UserController.class);
2.2、使用日志对象来打印日志(使用日志对象提供的内置方法打印)
@RequestMapping("/user")
@Controller
@ResponseBody //用来设置当前类中所有的方法返回的是数据而非页面
public class UserController {
//1、得到日志对象
private static final Logger logger= LoggerFactory.getLogger(UserController.class);
@RequestMapping("/hi")
public String sayHi(){
//写日志
logger.trace("我是trace");
logger.debug("我是debug");
logger.info("我是info");
logger.warn("我是warn");
logger.error("我是error");
return "hi,Spring Boot";
}
}
常见的日志框架说明
3、日志级别
3.1、作用
1、快速筛选重要的日志;
2、不同环境实现不同的日志级别的设置
3.2、日志级别
trace:微量,少许的意思,级别最低;
debug:需要调试时候的关键信息打印;
info:普通的打印信息(默认日志级别);
warn:警告,不影响使用,但需要注意的问题;
error:错误信息,级别较高的错误日志信息;
fatal:致命的,因为代码异常导致程序退出执行的事件。
日志级别规则:
当程序中设置了日志级别之后,那么程序只会打印和设置级别相同和大于当前日志级别的日志,小于当前级别的日志不会输出
3.3、日志级别的设置
#设置日志级别
logging:
level:
root: debug
根据不同的目录设置不同的日志级别:
#设置日志级别
logging:
level:
root: error
com:
example:
demo:
controller: trace
service: info
System.out.println相对于日志框架的缺点:
1、打印的信息不全(没有打印日志的时间、没有打印日志的来源);
2、不能实现日志打印的隐藏和显示;
3、System.out.println打印的日志不能被持久化
4、日志持久化
4.1、设置日志的保存目录
logging:
file:
path: d:\\loggings
4.2、设置日志保存文件名
logging:
file:
name: springlog.log
5、更简单的日志输出-lombok
由于LoggerFactory.getLogger(xxx.class)太繁琐,使用lombok来进行更简单的输出:
1、添加lombok框架支持;
2、使用@slf4j注解输出日志
5.1、添加lombok依赖
@Controller
@ResponseBody
@RequestMapping("/art")
@Slf4j
public class ArticleController {
//private static final Logger logger= LoggerFactory.getLogger(ArticleController.class);
@RequestMapping("/hi")
public String sayHi(){
log.trace("我是slf4j的trace");
log.debug("我是slf4j的debug");
log.info("我是slf4j的info");
return "hi,art";
}
}
旧项目添加新依赖框架
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
5.2、使用@slf4j注解输出日志
@Controller
@ResponseBody
@RequestMapping("/art")
@Slf4j
public class ArticleController {
//private static final Logger logger= LoggerFactory.getLogger(ArticleController.class);
@RequestMapping("/hi")
public String sayHi(){
log.trace("我是slf4j的trace");
log.debug("我是slf4j的debug");
log.info("我是slf4j的info");
return "hi,art";
}
}
5.3、lombok原理
Lombok 的原理是通过AspectJ (一种对Java的面向切面(AOP)的编程方案)将注解转换为代码。Lombok根据注解的类型在源代码中添加或替换方法,以便在编译时将注解嵌入源代码中。
java程序的运行原理:
lombok的作用
5.4、lombok的注解说明
注解 | 说明 |
@NoArgsConstructor/@AllArgsConstructor |
该类产生无参的构造方法和包含所有参数的构造方法 |
@RequiredArgsConstructor | 将类中所有带有@NonNull注解 / org.jetbrains.annotations.NotNull注解 的或者带有final修饰的成员变量 生成对应的构造方法 |
@Getter/@Setter |
用在成员变量上面或者类上面,相当于为成员变量生成对应的get和set方法,同时还可以为生成的方法指定访问修饰符,默认为public |
@Data | 效果等同于 @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor |
@Builder | 标注@Builder的类, 会在类内部生成一个内部类,用于生成值对象 |
@Accessors | 要搭配@Getter与@Setter使用,用来修改默认的setter与getter方法的形式 |
@NonNull | 属性不能为null |
@ToString | 自动添加toString方法 |
@EqualsAndHashCode | 自动添加equals和hashCode方法 |
@RequiredArgsConstructor | 自动添加必须属性的构造方法,包括含@NotNull注解的字段;final修饰且未初始化的字 |