目录

选择 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启动类的所在的路径及其子路径
有两种类型的配置文件,同时存在都生效

- # 配置项⽬端⼝号
- server.port=8084
- spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=
- utf8
- spring.datasource.username=root
- spring.datasource.password=root
- 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
每一层要在左对齐,并且冒号后面一定要于要有空格
和上面的一样
注意:如果没有设置好编码的格式,可能yml文件的中文注解会出现乱码的现象,而且是不可逆的

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

- # 字符串
- 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."
打印的结果
- student:
- id: 1
- name: Java
- age: 18
或者是行内写法
student: {id: 1,name: Java,age: 18}
- @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());
- }
- }

- dbtypes:
- name:
- - mysql
- - sqlserver
- - db2
或者是行内写法
dbtypes: {name: [mysql,sqlserver,db2]}
- map2:
- key1: value1
- key2: value2
- key3: value3
在不同的阶段,配置文件的内容不一样,比如一个软件的开发通常包括:开发,测试,预发布和发布阶段,每一个阶段不同的人员参与研发,他们的数据库等一些的信息可能不同,因此我们就需要不同的配置文件来对应不同阶段的配置文件的信息

在application.yml文件中配置当前的环境(此时配置的就是开发环境,默认读取application-dev.yml)
- spring:
- #当前的阶段,dev是开发阶段,test是测试阶段,prod是发布阶段
- profiles:
- active: dev
注意:如果同时两种类型的配置文件同时存在,都生效,如果这两个文件有冲突项,以properties文件为主,通常只存在一种.
SpringBoot中内置了日志框架,在启动springboot项目的时候可以看到有如下格式的打印的日志信息

日志门面可以类比为JDBC,日志实现可以类比为mysql,oracle等数据库通过slf4j或者commons-logging可以调用日志,从而完成日志功能
我们可以通过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("第一条日志信息");
-
- }
-
- }

日志级别为:
- @PostConstruct
- public void postConstruct(){
- logger.trace("trace日志信息....");
- logger.debug("debug...");
- logger.info("info...");
- logger.warn("warn....");
- logger.error("error...");
-
- }
打印的日志信息:
可以观察到上面两个日志信息没有打印出来,为什么会这样呢?接下来日志级别来说明
日志级别的顺序:

SpringBoot的默认日志级别为info,低于info级别的信息不打印
我们可以通过配置文件对日志级别进行修改
- logging:
- level:
- root: warn
可以观察到只打印了warn和error级别的日志信息

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

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

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

日志超过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
- # 设置⽇志⽂件的⽂件名
- logging:
- file:
- name: springboot.log
文件默认保存当当前目录的下面

可以这样设置进行保存到特定的目录下面
- logging:
- file:
- name: D:\java cave\Loggings\springboot.log
添加lombok依赖
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- <version>1.18.20version>
- <optional>trueoptional>
- 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 的作用如下图所示:

| 注解 | 作用 |
| @Getter | 自动添加 getter 方法 |
| @Setter | 自动添加 setter 方法 |
| @ToString | 自动添加 toString 方法 |
| @EqualsAndHashCode | 自动添加 equals 和 hashCode 方法 |
| @NoArgsConstructor | 自动添加无参构造方法 |
| @AllArgsConstructor | 自动添加全属性构造方法,顺序按照属性的定义顺序 |
| @NonNull | 属性不能为 null |
| @RequiredArgsConstructor | 自动添加必需属性的构造方法,final +@NonNull 的属性为必需 |
@Getter和@Setter注解加在属性上面,给特定的属性加getter和setter方法,加在类上面给所有的属性加getter和setter方法
| 注解 | 作用 |
| @Data | @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor + @NoArgsConstructor |
| 注解 | 作用 |
|
@Slf4j
|
添加一个名为 log 的日志,使用 slf4j
|