SpringBoot

目录

一.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.日志注解


一.SpringBoot

1.介绍SpringBoot

Spring 的诞生是为了简化 Java 程序的开发的,而 Spring Boot 的诞生是为了简化 Spring 程序开发
的。
Spring Boot 就是 Spring 框架的脚手架,它就是为了快速开发 Spring 框架而诞生的。

2.SpringBoot优点

  • 快速集成框架,Spring Boot 提供了启动添加依赖的功能,用于秒级集成各种框架。
  • 内置运行容器,无需配置 Tomcat 等 Web 容器,直接运行和部署程序。
  • 快速部署项目,无需外部容器即可启动并运行项目。
  • 可以完全抛弃繁琐的 XML,使用注解和配置的方式运行开发。
  • 支持更多的监控的指标,可以更好的了解项目的运行情况。

二.创建SpringBoot工程 

选择 SpringBoot2的版本,加入Lombok和SpringWeb依赖 

 

 SpringBoot项目启动器

 简单的一个程序

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启动类的所在的路径及其子路径

三.SpringBoot的配置文件

有两种类型的配置文件,同时存在都生效

1.properties配置文件

1.properties配置文件格式

properties 是以键值的形式配置的,key 和 value 之间是以“=”连接的,如
# 配置项⽬端⼝号
server.port=8084
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=
utf8
spring.datasource.username=root
spring.datasource.password=root

2.取配置文件的信息

如果在项目中,想要主动的读取配置文件中的内容,可以使用 @Value 注解来实现。
@Value 注解使⽤“${}”的格式读取
@Component
public class ReadYml {

    @Value("${server.port}")
    private String port;
    @PostConstruct
    public void postConstruct() {
        System.out.println("Read YML,port:" + port);
    }
}

3.properties配置文件的优缺点

从上述配置key看出,properties 配置文件中会有很多的冗余的信息,会对带宽有影响

2.yml配置文件

yml 是 YAML 是缩写,它的全称 Yet Another Markup Language 翻译成中⽂就是“另⼀种标记语
言”。

1.yml配置文件格式

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

 每一层要在左对齐,并且冒号后面一定要于要有空格

2.取配置文件的信息

和上面的一样

注意:如果没有设置好编码的格式,可能yml文件的中文注解会出现乱码的现象,而且是不可逆的

因此当打开或者创建一个spring项目的时候,我们首先要设置好File Encodings(如下图所示)

3.yml配置文件的优缺点

  1. yml是一个可读性高,写法简单,易于理解,他的语法和JSON语言类似
  2. yml支持更多的数据类型,它可以简单表达清单(数组)、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等。
  3. yml支持更多的编程语言,它不止是Java中可以使用在Golang、PHP、Python、Ruby、JavaScript、Perl中。

3.yml配置文件配置不同数据类型

1.配置不同数据类型及 null

# 字符串
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."

打印的结果

从上述结果可以看出:
  • 字符串默认不用加上单引号或者双引号。
  • 单引号会转义特殊字符,特殊字符最终只是一个普通的字符串数据。
  • 双引号不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思。

2.配置对象

student:
 id: 1
 name: Java
 age: 18

 或者是行内写法

student: {id: 1,name: Java,age: 18}
这个时候就不能用 @Value 来读取配置中的对象了,此时要使用另一个注解
@ConfigurationProperties 来读取,具体实现如下
@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());
    }
}

 3.配置list集合

dbtypes:
 name:
 - mysql
 - sqlserver
 - db2

或者是行内写法

dbtypes: {name: [mysql,sqlserver,db2]}

4.配置map集合

map2:
  key1: value1
  key2: value2
  key3: value3

4.多平台配置文件

在不同的阶段,配置文件的内容不一样,比如一个软件的开发通常包括:开发,测试,预发布和发布阶段,每一个阶段不同的人员参与研发,他们的数据库等一些的信息可能不同,因此我们就需要不同的配置文件来对应不同阶段的配置文件的信息

 在application.yml文件中配置当前的环境(此时配置的就是开发环境,默认读取application-dev.yml)

spring:
  #当前的阶段,dev是开发阶段,test是测试阶段,prod是发布阶段
  profiles:
    active: dev  

注意:如果同时两种类型的配置文件同时存在,都生效,如果这两个文件有冲突项,以properties文件为主,通常只存在一种. 

四.SpringBoot的日志

SpringBoot中内置了日志框架,在启动springboot项目的时候可以看到有如下格式的打印的日志信息

1.常见日志框架

 日志门面可以类比为JDBC,日志实现可以类比为mysql,oracle等数据库通过slf4j或者commons-logging可以调用日志,从而完成日志功能

2.自定义日志

我们可以通过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("第一条日志信息");

    }

}

3.日志的级别

1.日志的级别

日志级别为:

  • trace:微量,少许的意思,级别最低;
  • debug:需要调试时候的关键信息打印;
  • info:普通的打印信息(默认日志级别);
  • warn:警告,不影响使用,但需要注意的问题;
  • error:错误信息,级别较高的错误日志信息;
  • fatal:致命的,因为代码异常导致程序退出执行的事件。(不提供方法,系统挂了自动打印)
    @PostConstruct
    public void postConstruct(){
        logger.trace("trace日志信息....");
        logger.debug("debug...");
        logger.info("info...");
        logger.warn("warn....");
        logger.error("error...");

    }

打印的日志信息: 

 可以观察到上面两个日志信息没有打印出来,为什么会这样呢?接下来日志级别来说明

2.日志级别的顺序

 日志级别的顺序:  

 SpringBoot的默认日志级别为info,低于info级别的信息不打印

我们可以通过配置文件对日志级别进行修改

logging:
  level:
    root: warn

可以观察到只打印了warn和error级别的日志信息 

3.分目录打印

设置其他目录打印的级别为info,com.javastudy.springboot3.controller目录下面的信息打印的默认日志级别为debug

logging:
  level:
    root: info
    com:
      javastudy:
        springboot3:
          controller: debug

4.日志持久化

以上的日志都是输出在控制台上的,然而在生产环境上咱们需要将日志保存下来,以便出现问题之后追溯问题,把日志保存下来的过程就叫做持久化。

1.配置日志保存的地址

logging:
  file:
    path: D:\java cave\Loggings

日志文件信息:两次不同的时间点启动springboot程序,可以看到两次日志的信息(是追加添加的) 

 2.配置分割日志

日志超过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

3.配置日志文件的文件名

# 设置⽇志⽂件的⽂件名
logging:
 file:
 name: springboot.log

文件默认保存当当前目录的下面 

 可以这样设置进行保存到特定的目录下面

logging:
  file:
    name: D:\java cave\Loggings\springboot.log

5.Lombok结合日志

添加lombok依赖

<dependency>
<groupId>org.projectlombok</groupId>
 <artifactId>lombok</artifactId>
 <version>1.18.20</version>
 <optional>true</optional>
</dependency>

在需要日志信息输出的类上面加@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 的作用如下图所示:

 

6.Lombok其他用处 

1.基本注解

注解作用
@Getter自动添加 getter 方法
 
@Setter自动添加 setter 方法
@ToString自动添加 toString 方法
@EqualsAndHashCode自动添加 equals 和 hashCode 方法
@NoArgsConstructor自动添加无参构造方法
@AllArgsConstructor自动添加全属性构造方法,顺序按照属性的定义顺序
@NonNull属性不能为 null
@RequiredArgsConstructor自动添加必需属性的构造方法,final +@NonNull 的属性为必需

@Getter和@Setter注解加在属性上面,给特定的属性加getter和setter方法,加在类上面给所有的属性加getter和setter方法

2.组合注解

注解作用
@Data@Getter + @Setter + @ToString +
@EqualsAndHashCode +
@RequiredArgsConstructor +
@NoArgsConstructor

3.日志注解

注解作用
@Slf4j
添加一个名为 log 的日志,使用 slf4j
  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

允歆辰丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值