您现在的位置是:首页 > 正文

SpringBoot

2024-04-01 02:25:25阅读 3

目录

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

网站文章

  • 项目阶段一:用户注册和登陆

    项目阶段一:用户注册和登陆

    项目阶段一:用户注册和登陆的实现。 需求 1:用户注册 需求如下: 1)访问注册页面 2)填写注册信息,提交给服务器 3)服务器应该保存用户 4)当用户已经存在----提示用户注册 失败,用户名已存在...

    2024-04-01 02:25:19
  • 浅析ARMv8体系结构:异常处理机制

    浅析ARMv8体系结构:异常处理机制

    异常处理指的是处理器在运行过程中发生了外部事件,导致处理器需要中断当前执行流程转而去处理异常事件的一种机制。在Intel处理器的术语中,中断与异常被分开来描述,但在ARMv8体系结构中,异常和中断统一被称为异常处理。

    2024-04-01 02:24:34
  • Python-pyinstaller:No such file or directory 解决方案

    Python-pyinstaller:No such file or directory 解决方案

    Python-pyinstaller:No such file or directory 解决方案

    2024-04-01 02:24:27
  • 原型模式-学习设计模式

    做个笔记引用https://blog.csdn.net/lovelion/article/details/7424623/** *接口类 */interface OfficialDocument ex...

    2024-04-01 02:24:18
  • python之生成器、迭代器

    python之生成器、迭代器

    python之生成器、迭代器一、生成器创建生成器的方法二、迭代器一、生成器使用列表推导的前提是将所有数据都存入内存,若是数据特别大,则内存消耗会很大,使用生成器可以在循环遍历列表的时候动态生成下一个元...

    2024-04-01 02:23:36
  • php版canvas,HTML5 Canvas

    php版canvas,HTML5 Canvas

    canvas 元素用于在网页上绘制图形。什么是 Canvas?HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。 (推荐学习:html教程)画布是一个矩形区域,您可以控制...

    2024-04-01 02:23:28
  • 在Linux下交叉编译生成windows程序

    在Ubuntu环境下,利用mingw32,交叉编译windows程序,以便在windows下运行。

    2024-04-01 02:23:21
  • 【深度学习】ubuntu系统指定gcc版本并调整优先级

    【深度学习】ubuntu系统指定gcc版本并调整优先级

    sudo apt install build-essential gcc --version (查看gcc版本)可以看到我的gcc版本是4.8.5 安装最新版gcc9 sudo apt install...

    2024-04-01 02:23:14
  • java中什么是互斥,什么是Java中的互斥和信号量? 主要区别是什么?

    信号量可以被计数,而互斥量只能算到1。假设你有一个接受客户端连接的线程正在运行。 这个线程可以同时处理10个客户端。 然后每个新的客户端设置信号量,直到它达到10.当信号量有10个标志,那么你的线程将...

    2024-04-01 02:22:25
  • 华为p50鸿蒙os1020,鸿蒙OS+液态镜头+麒麟1020华为P50,华为P30即将悲惨让路价崩

    华为p50鸿蒙os1020,鸿蒙OS+液态镜头+麒麟1020华为P50,华为P30即将悲惨让路价崩

    原标题:鸿蒙OS+液态镜头+麒麟1020华为P50,华为P30即将悲惨让路价崩鸿蒙OS+液态镜头+麒麟1020华为P50,华为P30即将悲惨让路价崩据最新消息,华为P50系列有可能采用“液态镜头”,这...

    2024-04-01 02:22:17