0


SpringBoot

一.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

标签: spring boot java spring

本文转载自: https://blog.csdn.net/qq_64580912/article/details/131880535
版权归原作者 允歆辰丶 所有, 如有侵权,请联系我们删除。

“SpringBoot”的评论:

还没有评论