SpringBoot中本地测试、热部署工具以及日志的配置和使用

4. 本地测试

往往在开发过程中业务代码非常复杂且频繁启动服务器测试,非常麻烦!这个时候使用本地测试就是一个很好的解决方案,springboot也提供了本地测试解决方案!

在使用本地测试之前每次测试都得先启动springboot应用,然后再在地址栏输入方法地址,但是使用本地测试后可以直接在idea运行测试方法,不用事先启动springboot工厂,其本质是类在实例化的过程中会自动启动工厂,然后调用方法。

# spring中本地测试

	1. 启动工厂
		ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
		
	2. 从工厂中获取对象
		UserDAO userDAO = context.getBean("userDAO");
		
	3. 调用方法
		userDAO.xxx(参数);
		
# springboot框架中完成本地测试
	
	springboot = spring + springmvc
	
	1. 引入结合junit和springboot依赖
	
	2. 启动springboot应用	spring工厂才能启动	注入测试对象
		@SpringBootTest
			修饰范围:用在类上
			作用:	  在这个类实例化的过程中启动springboot应用
		
  1. 在pom.xml中引入测试依赖
<!--spring-boot-starter-test  junit 单元-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <!--指定本地测试只能在src/test包下可用-->
    <scope>test</scope>
</dependency>
  1. 编写测试类

测试类应该写在src/test及其子包下

@SpringBootTest

  • 修饰范围: 用在类上
  • 作用: 用来启动本地Spring环境
@SpringBootTest
public class UserServiceTest {

    @Autowired
    private UserService userService;

    // 测试查询所有
    @Test
    public void testFindAll(){
        userService.findAll().forEach(user -> System.out.println(user.getName()));
    }
}

在这里插入图片描述

补充

如果不想使用@SpringBootTest也能在实例化类的时候启动工厂,可以创建一个基类,让该基类使用@SpringBootTest注解,然后创建测试类的时候让测试类继承基类,这样在要想实例化测试类,需要先实例化作为父类的基类,基类一旦实例化则工厂就启动了。

基类BasicTests

@SpringBootTest
public class BasicTests {
}

测试类

测试Service

// 让测试类继承基类
public class UserServiceTest extends BasicTests{

    @Autowired
    private UserService userService;		// 测试谁就注入谁

    // 测试查询所有
    @Test
    public void testFindAll(){
        userService.findAll().forEach(user -> System.out.println(user.getName()));
    }
}

在这里插入图片描述

测试DAO

public class UserDAOTests extends BasicTests{
    @Autowired
    private UserDAO userDAO;
    
    @Test
    public void testFindAll(){
        userDAO.findAll().forEach(user -> System.out.println(user.getName()));
    }
}

5. 热部署工具

热部署:不需要重启应用的情况下使修改生效

为了进一步提高开发效率,springboot为我们提供了全局项目热部署,日后在开发过程中修改了部分代码以及相关配置文件后,不需要每次重启使修改生效,在项目中开启了springboot全局热部署之后只需要在修改之后等待几秒即可使修改生效。

  1. 项目中引入依赖(关于热部署的依赖)
<!--热部署依赖 devtools-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <!--optional:该依赖是否可以传递 默认是false,代表可以传递,true代表不可传递只能当前项目可用-->
    <optional>true</optional>
</dependency>
  1. 设置idea中支持自动编译(只需要设置一次)

在这里插入图片描述

  1. 开启允许在运行过程中修改文件

下面的是2021版的idea中的设置

在这里插入图片描述

  1. 启动SpringBoot应用

在这里插入图片描述

注意:日志出现restartedMain代表已经生效,在使用热部署时如果遇到修改之后不能生效,请重试重启项目再试

6. 日志配置和使用

6.1 引言

​ springboot框架 集成logback日志

​ Logback日志是由log4j创始人设计的又一个开源日志组件。目前,logback分为三个模块:logback-core、logback-classic、 logback-access。是对log4j日志展示进一步改进!

​ 总结:logback 也是一个开源日志组件 和 log4j作用一致 都是用来生成日志 logback更加轻量

6.2 日志的级别

在这里插入图片描述

All > Trace > DEBUG > INFO > WARN > ERROR > Fatal > OFF

  • OFF | 关闭:最低级别,不打印日志。
  • FATAL | 致命:指明非常严重的可能会导致应用终止执行错误事件。
  • ERROR | 错误:指明错误事件,但应用可能还能继续运行。
  • WARN | 警告:指明可能潜在的危险状况。
  • INFO | 信息:指明描述信息,从粗粒度上描述了应用运行过程。
  • DEBUG | 调试:指明细致的事件信息,对调试应用最有用。
  • TRACE | 跟踪:指明程序运行轨迹,比DEBUG级别的粒度更细。
  • ALL | 所有:所有日志级别,包括定制级别。

我们自己写的代码用的最多的是 DEBUG、INFO、WARN、ERROR这几个级别。如果需要做一些调试,就用DEBUG;如果想做一些基本的信息输出,就用INFO;如果觉得自己写的代码存在潜在风险,就用WARN;如果自己写的代码日后可能会出现错误,就用ERROR级别。

日志级别由低到高: 日志级别越高输出的日志信息越多

6.3 项目中日志分类

# 日志分类
- 一种是rootLogger(根全局日志) :		用来监听项目中所有的运行日志 包括引入依赖jar中的日志

- 一种是logger(指定包级别日志) :			用来监听项目中指定包中的日志信息

6.4 配置日志

注意:SpringBoot框架中默认根日志为INFO

在这里插入图片描述

当我们想要修改根日志的级别和子日志的级别时我们可以在application.yml配置文件中配置,如下

# 配置日志    根日志是唯一的,只能写一个。但子日志可以写多个,可以监测任何包
logging:
  level:
    root: info  # 调整根(全局)日志展示为debug
    com.baizhi.dao: debug # 设置指定包的日志级别
    com.baizhi.service: debug

在这里插入图片描述

在这里插入图片描述

有时候我们不仅想使日志在控制台输出,还想使它打印成文件,我们可以这样配置

在这里插入图片描述

在这里插入图片描述

6.5 项目中使用日志

package com.baizhi.service;

import com.baizhi.dao.UserDAO;
import com.baizhi.eneity.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional
public class UserServiceImpl implements UserService{

    // 声明一个日志对象
    private static final Logger log = LoggerFactory.getLogger(UserService.class);

    private UserDAO userDAO;

    @Autowired
    public void setUserDAO(UserDAO userDAO) {
        this.userDAO = userDAO;
    }

    @Override
    public List<User> findAll() {
        return userDAO.findAll();
    }

    @Override
    public void save(User user) {
        log.debug("姓名:" + user.getName()); // log.debug("姓名:{}, {}, {}",user.getName(),"参数2","参数3");
        log.debug("工资:" + user.getSalary()); // log.debug("姓名:{}==>{}==>{}",user.getSalary(),"参数2","参数3");
        log.debug("生日:" + user.getBirthday());
        userDAO.save(user);
    }
}

在这里插入图片描述

注意点1:

在这里插入图片描述

注意点2:

在这里插入图片描述

在这里插入图片描述

日志对象不仅可以用在service,还可以用在dao、controller层等等。

补充:使用插件使我们想要使用日志对象进行调试时不用声明日志对象

使用插件可以使我们不用每次都得声明日志对象,那怎么配置呢,我们往下看

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

插件使用

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值