SpringBoot常用的框架集成

SpringBoot之CommandLineRunner

应用场景:需求需要提前将部分数据加载到Spring容器中。我们需要在项目启动完立即初始化一些数据(比如缓存等),以便后面调用使用

解决方案:

1、定义静态常量,随着类的生命周期加载而提前加载(这种方式可能对于工作经验较少的伙伴,选择是最多的);

2、实现CommandLineRunner接口容器启动之后,加载实现类的逻辑资源,已达到完成资源初始化的任务,不同的 CommandLineRunner 实现可以通过 @Order() 指定执行顺序

3、@PostConstruct;在具体Bean的实例化过程中执行,@PostConstruct注解的方法,会在构造方法之后执行;

加载顺序为:Constructor > @Autowired > @PostConstruct > 静态方法;

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class InitStarter implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        System.out.println("CommandLineRunner example start");
    }
} 

image-20220406155558908

SpringBoot定时任务

创建一个定时器的配置类

package com.zsq.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;

import java.time.LocalDateTime;

@Configuration      //1.主要用于标记配置类,兼备Component的效果。
@EnableScheduling   // 2.开启定时任务
public class ScheduleTaskConfig {
    //3.添加定时任务
    @Scheduled(cron = "0/5 * * * * ?")
    //或直接指定时间间隔,例如:5秒
    //@Scheduled(fixedRate=5000)
    private void configureTasks() {
        System.err.println("执行静态定时任务时间: " + LocalDateTime.now());
    }
}

Cron表达式参数分别表示:

  • 秒(0~59) 例如0/5表示每5秒
  • 分(0~59)
  • 时(0~23)
  • 日(0~31)的某天,需计算
  • 月(0~11)
  • 周几( 可填1-7 或 SUN/MON/TUE/WED/THU/FRI/SAT)

@Scheduled:除了支持灵活的参数表达式cron之外,还支持简单的延时操作,例如 fixedDelay ,fixedRate 填写相应的毫秒数即可。

建议:直接点击在线Cron表达式生成器生成参数比较方便

image-20220406160434340

Spring Boot 日志框架

常见的日志框架有 log4jlogbacklog4j2

log4j 这个日志框架显示是耳熟能详了,在Spring开发中是经常使用,但是据说log4j官方已经不再更新了,而且在性能上比 logback 、 log4j2 差了很多。

logback 是由 log4j 创始人设计的另外一个开源日志框架,logback相比之于log4j性能提升了10以上初始化内存加载也更小了作为的Spring Boot默认的日志框架肯定是有着不小的优势。 log4j2 晚于 logback 推出,官网介绍性能比 logback 高,但谁知道是不是王婆卖瓜自卖自夸,坊间流 传,log4j2在很多思想理念上都是照抄logback,因此即便log4j2是Apache官方项目,Spring等许多框 架项目没有将它纳入主流。此处完全是作者道听途说,不必当真,题外话而已。

代码中如何使用日志?

第一种其实也是很早之前常用的一种方式,只需要在代码添加如下:

private final Logger logger= LoggerFactory.getLogger(DemoApplicationTests.class);

这种方式显然比较鸡肋,如果每个类中都添加一下岂不是很low。别着急,lombok为我们解决了这个难题。

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>

使用也是很简单,只需要在类上标注一个注解 @Slf4j 即可,如下:

@Slf4j
class DemoApplicationTests {
@Test
public void test(){
   log.debug("输出DEBUG日志.......");
  }
}

如何定制日志级别?

Spring Boot中默认的日志级别是INFO,但是可以自己定制日志级别,如下:

logging:
  level:
    root: debug

上面是将所有的日志的级别都改成了 DEBUG

日志如何输出到文件中?

Spring Boot中日志默认是输出到控制台的,但是在生产环境中显示不可行的,因此需要配置日志输出 到日志文件中。 其中有两个重要配置如下:

  1. logging.file.path :指定日志文件的路径
  2. logging.file.name :日志的文件名,默认为 spring.log
  3. 注意:官方文档说这两个属性不能同时配置,否则不生效,因此只需要配置一个即可指定输出的文件为当前项目路径的 logs 文件下,默认生成的日志文件为 spring.log ,如下:
logging:
  file:
    path: ./log

image-20220406164417138

如何定制日志格式?

有时我们需要定制自己需要的日志输出格式,这样在排查日志 的时候能够一目了然。

定制日志格式有两个配置,分别是控制台的输出格式和文件中的日志输出格式,如下:

  1. logging.pattern.console :控制台的输出格式
  2. logging.pattern.file :日志文件的输出格式
logging:
  file:
    path: ./log
  pattern:
    console: "%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n"
    file: "%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n"
  level:
    root: info

%d{HH:mm:ss.SSS}——日志输出时间

%thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用

%-5level——日志级别,并且使用5个字符靠左对齐

%logger- ——日志输出者的名字

%msg——日志消息

%n——平台的换行符

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值